Initialize() protected method

protected Initialize ( ) : void
return void
        private void ProcessPlatform(XmlNode platformNode)
        {
            // process platform task assemblies
            if (!ScannedTasks) {
                FileSet platformTaskAssemblies = new FileSet();
                platformTaskAssemblies.BaseDirectory = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);
                platformTaskAssemblies.Project = Project;
                platformTaskAssemblies.NamespaceManager = NamespaceManager;
                platformTaskAssemblies.Parent = Project; // avoid warnings by setting the parent of the fileset
                platformTaskAssemblies.ID = "platform-task-assemblies"; // avoid warnings by assigning an id
                XmlNode taskAssembliesNode = platformNode.SelectSingleNode(
                    "nant:task-assemblies", NamespaceManager);
                if (taskAssembliesNode != null) {
                    platformTaskAssemblies.Initialize(taskAssembliesNode,
                        Project.Properties, null);
                }

                // scan platform extensions assemblies
                LoadTasksTask loadTasks = new LoadTasksTask();
                loadTasks.Project = Project;
                loadTasks.NamespaceManager = NamespaceManager;
                loadTasks.Parent = Project;
                loadTasks.TaskFileSet = platformTaskAssemblies;
                loadTasks.FailOnError = false;
                loadTasks.Threshold = (Project.Threshold == Level.Debug) ?
                    Level.Debug : Level.Warning;
                loadTasks.Execute();

                // scan NAnt.Core
                TypeFactory.ScanAssembly(Assembly.GetExecutingAssembly(), loadTasks);
            }

            // process the framework nodes of the current platform
            ProcessFrameworks(platformNode);

            // process runtime framework task assemblies
            if (!ScannedTasks) {
                LoadTasksTask loadTasks = new LoadTasksTask();
                loadTasks.Project = Project;
                loadTasks.NamespaceManager = NamespaceManager;
                loadTasks.Parent = Project;
                loadTasks.TaskFileSet = Project.RuntimeFramework.TaskAssemblies;
                loadTasks.FailOnError = false;
                loadTasks.Threshold = (Project.Threshold == Level.Debug) ?
                    Level.Debug : Level.Warning;
                loadTasks.Execute();

                // ensure we don't scan task assemblies for the current
                // runtime framework and platform again
                ScannedTasks = true;
            }
        }
        /// <summary>
        /// Merges Merge Modules into the MSI Database.
        /// </summary>
        /// <param name="Database">The MSI Database.</param>
        /// <param name="TempPath">The path to temporary files.</param>
        private void LoadMergeModules(string Database, string TempPath) {
            // If <mergemodules>...</mergemodules> exists in the nant msi task

            if (msi.mergemodules != null) {
                MsmMerge2Class mergeClass = new MsmMerge2Class();

                int index = 1;

                Log(Level.Verbose, "Storing Merge Modules:");

                if (!Directory.Exists(TempPath))
                    Directory.CreateDirectory(TempPath);

                // Merge module(s) assigned to a specific feature
                foreach (MSIMerge merge in msi.mergemodules) {
                    // Get each merge module file name assigned to this feature
                    //NAntFileSet modules = merge.modules;

                    FileSet mergeSet = new FileSet();
                    mergeSet.Parent = this;
                    mergeSet.Project = Project;
                    mergeSet.NamespaceManager = NamespaceManager;

                    XmlElement modulesElem = (XmlElement)((XmlElement)_xmlNode).SelectSingleNode(
                        "nant:mergemodules/nant:merge[@feature='" + merge.feature + "']/nant:modules", 
                        NamespaceManager);

                    mergeSet.Initialize(modulesElem);

                    try {
                        mergeClass.OpenDatabase(Database);
                    } catch (FileLoadException fle) {
                        throw new BuildException("Error while opening the database for merging.", 
                            Location, fle);
                    }

                    // Iterate each module assigned to this feature
                    foreach (string mergeModule in mergeSet.FileNames) {
                        Log(Level.Verbose, "\t" + Path.GetFileName(mergeModule));

                        // Open the merge module (by Filename)
                        try {
                            mergeClass.OpenModule(mergeModule, 1033);
                        } catch (Exception ex) {
                            throw new BuildException(string.Format(CultureInfo.InvariantCulture,
                                "File '{0}' cannot be opened.", mergeModule), Location, ex);
                        }

                        // Once the merge is complete, components in the module are attached to the
                        // feature identified by Feature. This feature is not created and must be
                        // an existing feature. Note that the Merge method gets all the feature
                        // references in the module and substitutes the feature reference for all
                        // occurrences of the null GUID in the module database.

                        if (merge.configurationitems != null) {
                            Log(Level.Verbose, "\t\tConfigurable item(s):");
                            Hashtable configurations = new Hashtable();
                            foreach (MSIConfigurationItem configItem in merge.configurationitems) {
                                if ((configItem.module == null || configItem.module.Equals(String.Empty)) || configItem.module.ToLower().Equals(mergeModule.ToLower()) || configItem.module.ToLower().Equals(Path.GetFileName(mergeModule.ToLower()))) {
                                    if (configItem.module == null || configItem.module.Equals(String.Empty)) {
                                        if (configurations[configItem.name] == null) {
                                            configurations[configItem.name] = configItem.value;
                                            Log(Level.Verbose, "\t\t\t{0}\tValue: {1}", 
                                                configItem.name, configItem.value);
                                        }
                                    } else {
                                        configurations[configItem.name] = configItem.value;
                                        Log(Level.Verbose, "\t\t\t{0}\tValue: {1}", 
                                            configItem.name, configItem.value);
                                    }
                                }
                            }
                            mergeClass.MergeEx(merge.feature, null, new MsmConfigureModule(configurations));
                        } else {
                            mergeClass.Merge(merge.feature, null);
                        }

                        string moduleCab = Path.Combine(Path.GetDirectoryName(Database),
                            "mergemodule" + index + ".cab");

                        index++;

                        mergeClass.ExtractCAB(moduleCab);

                        if (File.Exists(moduleCab)) {
                            // Extract the cabfile contents to a Temp directory
                            try {
                                ExtractCabFileToTempDirectory(moduleCab);
                            } finally {
                                File.Delete(moduleCab);
                            }
                        }
                        mergeClass.CloseModule();
                    }
                    // Close and save the database
                    mergeClass.CloseDatabase(true);

                }
            }
        }