NAnt.DotNet.Tasks.AssemblyLinkerTask.ExecuteTask C# (CSharp) Method

ExecuteTask() protected method

Generates an assembly manifest.
protected ExecuteTask ( ) : void
return void
        protected override void ExecuteTask()
        {
            // ensure base directory is set, even if fileset was not initialized
            // from XML
            if (Resources.BaseDirectory == null) {
                Resources.BaseDirectory = new DirectoryInfo(Project.BaseDirectory);
            }
            // ensure base directory is set, even if fileset was not initialized
            // from XML
            if (ModuleSet.Dir == null) {
                ModuleSet.Dir = new DirectoryInfo(Project.BaseDirectory);
            }

            if (NeedsCompiling()) {
                // create temp response file to hold compiler options
                _responseFileName = Path.GetTempFileName();
                StreamWriter writer = new StreamWriter(_responseFileName);

                try {
                    Log(Level.Info, ResourceUtils.GetString("String_CompilingFiles"),
                        Resources.FileNames.Count + EmbeddedResources.Count +
                        ModuleSet.Modules.Count, OutputFile.FullName);

                    // write modules to compile into assembly
                    foreach (Module module in ModuleSet.Modules) {
                        writer.WriteLine("\"{0}\"", module.ToString());
                    }

                    // write output target
                    writer.WriteLine("/target:\"{0}\"", OutputTarget);

                    // write output file
                    writer.WriteLine("/out:\"{0}\"", OutputFile.FullName);

                    // algorithm (in hexadecimal)
                    if (AlgorithmID != null) {
                        writer.WriteLine("/algid:\"{0}\"", AlgorithmID);
                    }

                    // company field
                    if (Company != null) {
                        writer.WriteLine("/company:\"{0}\"", Company);
                    }

                    // configuration field
                    if (Configuration != null) {
                        writer.WriteLine("/configuration:\"{0}\"", Configuration);
                    }

                    // copyright field
                    if (Copyright != null) {
                        writer.WriteLine("/copyright:\"{0}\"", Copyright);
                    }

                    // write culture associated with output assembly
                    if (Culture != null) {
                        writer.WriteLine("/culture:\"{0}\"", Culture);
                    }

                    // delay sign the assembly
                    switch (DelaySign) {
                        case DelaySign.NotSet:
                            break;
                        case DelaySign.Yes:
                            writer.WriteLine("/delaysign+");
                            break;
                        case DelaySign.No:
                            writer.WriteLine("/delaysign-");
                            break;
                        default:
                            throw new BuildException (string.Format (CultureInfo.InvariantCulture,
                                "Value {0} is not supported for \"delaysign\".",
                                DelaySign), Location);
                    }

                    // description field
                    if (Description != null) {
                        writer.WriteLine("/description:\"{0}\"", Description);
                    }

                    // write path to security evidence file
                    if (EvidenceFile != null) {
                        writer.WriteLine("/evidence:\"{0}\"", EvidenceFile.FullName);
                    }

                    // file version field
                    if (FileVersion != null) {
                        writer.WriteLine("/fileversion:\"{0}\"", FileVersion);
                    }

                    // flags field
                    if (Flags != null) {
                        writer.WriteLine("/flags:\"{0}\"", Flags);
                    }

                    // main method
                    if (MainMethod != null) {
                        writer.WriteLine("/main:\"{0}\"", MainMethod);
                    }

                    // keycontainer
                    if (KeyContainer != null) {
                        writer.WriteLine("/keyname:\"{0}\"", KeyContainer);
                    }

                    // product field
                    if (Product != null) {
                        writer.WriteLine("/product:\"{0}\"", Product);
                    }

                    // product version field
                    if (ProductVersion != null) {
                        writer.WriteLine("/productversion:\"{0}\"", ProductVersion);
                    }

                    // write path to template assembly
                    if (TemplateFile != null) {
                        if (SupportsTemplate) {
                            writer.WriteLine("/template:\"{0}\"", TemplateFile.FullName);
                        } else {
                            Log(Level.Warning,
                                ResourceUtils.GetString("String_LinkerDoesNotSupportTemplateAssembly"),
                                Project.TargetFramework.Description);
                        }
                    }

                    // title field
                    if (Title != null) {
                        writer.WriteLine("/title:\"{0}\"", Title);
                    }

                    // trademark field
                    if (Trademark != null) {
                        writer.WriteLine("/trademark:\"{0}\"", Trademark);
                    }

                    // key file
                    if (KeyFile != null) {
                        writer.WriteLine("/keyfile:\"{0}\"", KeyFile.FullName);
                    }

                    // assembly version
                    if (Version != null) {
                        writer.WriteLine("/version:\"{0}\"", Version);
                    }

                    // win32 icon
                    if (Win32Icon != null) {
                        writer.WriteLine("/win32icon:\"{0}\"", Win32Icon.FullName);
                    }

                    // win32 resource
                    if (Win32Res != null) {
                        writer.WriteLine("/win32res:\"{0}\"", Win32Res.FullName);
                    }

                    // write embedded resources to response file
                    foreach (string resourceFile in Resources.FileNames) {
                        writer.WriteLine("/embed:\"{0}\"", resourceFile);
                    }

                    // write embedded resources to response file
                    foreach (EmbeddedResource embeddedResource in EmbeddedResources) {
                        writer.WriteLine("/embed:\"{0}\",{1}", embeddedResource.File,
                            embeddedResource.ManifestResourceName);
                    }

                    // suppresses display of the sign-on banner
                    writer.WriteLine("/nologo");

                    // make sure to close the response file otherwise contents
                    // Will not be written to disk and ExecuteTask() will fail.
                    writer.Close();

                    if (Verbose) {
                        // display response file contents
                        Log(Level.Verbose, ResourceUtils.GetString("String_ContentsOf"), _responseFileName);
                        StreamReader reader = File.OpenText(_responseFileName);
                        Log(Level.Verbose, reader.ReadToEnd());
                        reader.Close();
                    }

                    // call base class to do the work
                    base.ExecuteTask();
                } finally {
                    // make sure stream is closed or response file cannot be deleted
                    writer.Close();
                    // make sure we delete response file even if an exception is thrown
                    File.Delete(_responseFileName);
                    // initialize name of response file
                    _responseFileName = null;
                }
            }
        }