private bool BuildPackages(BuildSettings settings, XmlElement configElement, ResourceUpdater resourceUpdater, ArrayList filesCopied, Hashtable eulas) { bool fSucceeded = true; foreach (ProductBuilder builder in settings.ProductBuilders) { if (Validate && !builder.Product.ValidationPassed) { if (_results != null) { _results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Warning, "GenerateBootstrapper.ProductValidation", builder.Name, builder.Product.ValidationResults.FilePath)); foreach (string validationMessage in builder.Product.ValidationResults.ValidationErrors) { _results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Warning, "GenerateBootstrapper.ValidationError", builder.Product.ValidationResults.FilePath, validationMessage)); } foreach (string validationMessage in builder.Product.ValidationResults.ValidationWarnings) { _results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Warning, "GenerateBootstrapper.ValidationWarning", builder.Product.ValidationResults.FilePath, validationMessage)); } } } Package package = GetPackageForSettings(settings, builder, _results); if (package == null) { // GetPackage should have already added the correct message info continue; } if (Validate && !package.ValidationPassed) { if (_results != null) { _results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Warning, "GenerateBootstrapper.PackageValidation", builder.Name, package.ValidationResults.FilePath)); foreach (string validationMessage in package.ValidationResults.ValidationErrors) { _results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Warning, "GenerateBootstrapper.ValidationError", package.ValidationResults.FilePath, validationMessage)); } foreach (string validationMessage in package.ValidationResults.ValidationWarnings) { _results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Warning, "GenerateBootstrapper.ValidationWarning", package.ValidationResults.FilePath, validationMessage)); } } } XmlNode node = package.Node; // Copy the files for this package to the output directory XmlAttribute eulaAttribute = node.Attributes[EULA_ATTRIBUTE]; XmlNodeList packageFileNodes = node.SelectNodes(BOOTSTRAPPER_PREFIX + ":PackageFiles/" + BOOTSTRAPPER_PREFIX + ":PackageFile", _xmlNamespaceManager); XmlNode installChecksNode = node.SelectSingleNode(BOOTSTRAPPER_PREFIX + ":InstallChecks", _xmlNamespaceManager); foreach (XmlNode packageFileNode in packageFileNodes) { XmlAttribute packageFileSource = (XmlAttribute)(packageFileNode.Attributes.GetNamedItem("SourcePath")); XmlAttribute packageFileDestination = (XmlAttribute)(packageFileNode.Attributes.GetNamedItem("TargetPath")); XmlAttribute packageFileName = (XmlAttribute)(packageFileNode.Attributes.GetNamedItem("Name")); XmlAttribute packageFileCopy = (XmlAttribute)(packageFileNode.Attributes.GetNamedItem("CopyOnBuild")); if (packageFileSource != null && eulaAttribute != null && !String.IsNullOrEmpty(eulaAttribute.Value) && packageFileSource.Value == eulaAttribute.Value) { // need to remove EULA from the package file list XmlNode packageFilesNode = node.SelectSingleNode(BOOTSTRAPPER_PREFIX + ":PackageFiles", _xmlNamespaceManager); packageFilesNode.RemoveChild(packageFileNode); continue; } if ((packageFileSource != null) && (packageFileDestination != null)) { // Calculate the hash of this file and add it to the PackageFileNode if (!AddVerificationInformation(packageFileNode, packageFileSource.Value, packageFileName.Value, builder, settings, _results)) fSucceeded = false; } if ((packageFileSource != null) && (packageFileDestination != null) && ((packageFileCopy == null) || (String.Compare(packageFileCopy.Value, "False", StringComparison.InvariantCulture) != 0))) { // if this is the key for an external check, we will add it to the Resource Updater instead of copying the file XmlNode subNode = null; if ((installChecksNode != null) && (packageFileName != null)) { subNode = QueryForSubNode(installChecksNode, "PackageFile", packageFileName.Value); } if (subNode != null) { if (resourceUpdater != null) { if (!File.Exists(packageFileSource.Value)) { if (_results != null) _results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Error, "GenerateBootstrapper.PackageResourceFileNotFound", packageFileSource.Value, builder.Name)); fSucceeded = false; continue; } resourceUpdater.AddFileResource(packageFileSource.Value, packageFileDestination.Value); } } else { if (settings.ComponentsLocation != ComponentsLocation.HomeSite || !VerifyHomeSiteInformation(packageFileNode, builder, settings, _results)) { if (settings.CopyComponents) { string strDestinationFileName = System.IO.Path.Combine(settings.OutputPath, packageFileDestination.Value); try { if (!File.Exists(packageFileSource.Value)) { if (_results != null) _results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Error, "GenerateBootstrapper.PackageFileNotFound", packageFileDestination.Value, builder.Name)); fSucceeded = false; continue; } EnsureFolderExists(System.IO.Path.GetDirectoryName(strDestinationFileName)); File.Copy(packageFileSource.Value, strDestinationFileName, true); ClearReadOnlyAttribute(strDestinationFileName); } catch (UnauthorizedAccessException ex) { if (_results != null) _results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Error, "GenerateBootstrapper.CopyPackageError", packageFileSource.Value, builder.Name, ex.Message)); fSucceeded = false; continue; } catch (IOException ex) { if (_results != null) _results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Error, "GenerateBootstrapper.CopyPackageError", packageFileSource.Value, builder.Name, ex.Message)); fSucceeded = false; continue; } catch (ArgumentException ex) { if (_results != null) _results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Error, "GenerateBootstrapper.CopyPackageError", packageFileSource.Value, builder.Name, ex.Message)); fSucceeded = false; continue; } catch (NotSupportedException ex) { if (_results != null) _results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Error, "GenerateBootstrapper.CopyPackageError", packageFileSource.Value, builder.Name, ex.Message)); fSucceeded = false; continue; } filesCopied.Add(strDestinationFileName); } else { filesCopied.Add(packageFileSource.Value); } // Add the file size to the PackageFileNode XmlAttribute sizeAttribute = packageFileNode.OwnerDocument.CreateAttribute("Size"); FileInfo fi = new FileInfo(packageFileSource.Value); sizeAttribute.Value = "" + (fi.Length.ToString(CultureInfo.InvariantCulture)); MergeAttribute(packageFileNode, sizeAttribute); } } } } // Add the Eula attribute correctly if (eulas != null && eulaAttribute != null && !String.IsNullOrEmpty(eulaAttribute.Value)) { if (File.Exists(eulaAttribute.Value)) { // eulas[GetFileHash(eulaAttribute.Value)] = eulaAttribute.Value; string key = GetFileHash(eulaAttribute.Value); if (eulas.ContainsKey(key)) eulaAttribute.Value = ((DictionaryEntry)eulas[key]).Key.ToString(); else { string configFileKey = string.Format(CultureInfo.InvariantCulture, "EULA{0}", eulas.Count); DictionaryEntry de = new DictionaryEntry(configFileKey, eulaAttribute.Value); eulas[key] = de; eulaAttribute.Value = configFileKey; } } else { if (_results != null) _results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Error, "GenerateBootstrapper.PackageResourceFileNotFound", eulaAttribute.Value, builder.Name)); fSucceeded = false; continue; } } // Write the package node if (configElement != null) { configElement.AppendChild(configElement.OwnerDocument.ImportNode(node, true)); DumpXmlToFile(node, string.Format(CultureInfo.CurrentCulture, "{0}.{1}.xml", package.Product.ProductCode, package.Culture)); } } return fSucceeded; }
private bool BuildPackages(BuildSettings settings, XmlElement configElement, ResourceUpdater resourceUpdater, ArrayList filesCopied, Hashtable eulas) { bool flag = true; foreach (ProductBuilder builder in settings.ProductBuilders) { if ((this.Validate && !builder.Product.ValidationPassed) && (this.results != null)) { this.results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Warning, "GenerateBootstrapper.ProductValidation", new object[] { builder.Name, builder.Product.ValidationResults.FilePath })); foreach (string str in builder.Product.ValidationResults.ValidationErrors) { this.results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Warning, "GenerateBootstrapper.ValidationError", new object[] { builder.Product.ValidationResults.FilePath, str })); } foreach (string str2 in builder.Product.ValidationResults.ValidationWarnings) { this.results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Warning, "GenerateBootstrapper.ValidationWarning", new object[] { builder.Product.ValidationResults.FilePath, str2 })); } } Package package = this.GetPackageForSettings(settings, builder, this.results); if (package != null) { if ((this.Validate && !package.ValidationPassed) && (this.results != null)) { this.results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Warning, "GenerateBootstrapper.PackageValidation", new object[] { builder.Name, package.ValidationResults.FilePath })); foreach (string str3 in package.ValidationResults.ValidationErrors) { this.results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Warning, "GenerateBootstrapper.ValidationError", new object[] { package.ValidationResults.FilePath, str3 })); } foreach (string str4 in package.ValidationResults.ValidationWarnings) { this.results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Warning, "GenerateBootstrapper.ValidationWarning", new object[] { package.ValidationResults.FilePath, str4 })); } } XmlNode node = package.Node; XmlAttribute attribute = node.Attributes["LicenseAgreement"]; XmlNodeList list = node.SelectNodes("bootstrapper:PackageFiles/bootstrapper:PackageFile", this.xmlNamespaceManager); XmlNode subNode = node.SelectSingleNode("bootstrapper:InstallChecks", this.xmlNamespaceManager); foreach (XmlNode node3 in list) { XmlAttribute namedItem = (XmlAttribute) node3.Attributes.GetNamedItem("SourcePath"); XmlAttribute attribute3 = (XmlAttribute) node3.Attributes.GetNamedItem("TargetPath"); XmlAttribute attribute4 = (XmlAttribute) node3.Attributes.GetNamedItem("Name"); XmlAttribute attribute5 = (XmlAttribute) node3.Attributes.GetNamedItem("CopyOnBuild"); if (((namedItem != null) && (attribute != null)) && (!string.IsNullOrEmpty(attribute.Value) && (namedItem.Value == attribute.Value))) { node.SelectSingleNode("bootstrapper:PackageFiles", this.xmlNamespaceManager).RemoveChild(node3); } else { if (((namedItem != null) && (attribute3 != null)) && !this.AddVerificationInformation(node3, namedItem.Value, attribute4.Value, builder, settings, this.results)) { flag = false; } if (((namedItem != null) && (attribute3 != null)) && ((attribute5 == null) || (string.Compare(attribute5.Value, "False", StringComparison.InvariantCulture) != 0))) { XmlNode node5 = null; if ((subNode != null) && (attribute4 != null)) { node5 = this.QueryForSubNode(subNode, "PackageFile", attribute4.Value); } if (node5 != null) { if (resourceUpdater != null) { if (!File.Exists(namedItem.Value)) { if (this.results != null) { this.results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Error, "GenerateBootstrapper.PackageResourceFileNotFound", new object[] { namedItem.Value, builder.Name })); } flag = false; } else { resourceUpdater.AddFileResource(namedItem.Value, attribute3.Value); } } } else if ((settings.ComponentsLocation != ComponentsLocation.HomeSite) || !this.VerifyHomeSiteInformation(node3, builder, settings, this.results)) { if (settings.CopyComponents) { string path = System.IO.Path.Combine(settings.OutputPath, attribute3.Value); try { if (!File.Exists(namedItem.Value)) { if (this.results != null) { this.results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Error, "GenerateBootstrapper.PackageFileNotFound", new object[] { attribute3.Value, builder.Name })); } flag = false; goto Label_06D6; } this.EnsureFolderExists(System.IO.Path.GetDirectoryName(path)); File.Copy(namedItem.Value, path, true); this.ClearReadOnlyAttribute(path); } catch (UnauthorizedAccessException exception) { if (this.results != null) { this.results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Error, "GenerateBootstrapper.CopyPackageError", new object[] { namedItem.Value, builder.Name, exception.Message })); } flag = false; goto Label_06D6; } catch (IOException exception2) { if (this.results != null) { this.results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Error, "GenerateBootstrapper.CopyPackageError", new object[] { namedItem.Value, builder.Name, exception2.Message })); } flag = false; goto Label_06D6; } catch (ArgumentException exception3) { if (this.results != null) { this.results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Error, "GenerateBootstrapper.CopyPackageError", new object[] { namedItem.Value, builder.Name, exception3.Message })); } flag = false; goto Label_06D6; } catch (NotSupportedException exception4) { if (this.results != null) { this.results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Error, "GenerateBootstrapper.CopyPackageError", new object[] { namedItem.Value, builder.Name, exception4.Message })); } flag = false; goto Label_06D6; } filesCopied.Add(path); } else { filesCopied.Add(namedItem.Value); } XmlAttribute attribute6 = node3.OwnerDocument.CreateAttribute("Size"); FileInfo info = new FileInfo(namedItem.Value); attribute6.Value = info.Length.ToString(CultureInfo.InvariantCulture) ?? ""; this.MergeAttribute(node3, attribute6); } } Label_06D6:; } } if (((eulas != null) && (attribute != null)) && !string.IsNullOrEmpty(attribute.Value)) { if (File.Exists(attribute.Value)) { string fileHash = this.GetFileHash(attribute.Value); if (eulas.ContainsKey(fileHash)) { DictionaryEntry entry2 = (DictionaryEntry) eulas[fileHash]; attribute.Value = entry2.Key.ToString(); } else { string key = string.Format(CultureInfo.InvariantCulture, "EULA{0}", new object[] { eulas.Count }); DictionaryEntry entry = new DictionaryEntry(key, attribute.Value); eulas[fileHash] = entry; attribute.Value = key; } } else { if (this.results != null) { this.results.AddMessage(BuildMessage.CreateMessage(BuildMessageSeverity.Error, "GenerateBootstrapper.PackageResourceFileNotFound", new object[] { attribute.Value, builder.Name })); } flag = false; continue; } } if (configElement != null) { configElement.AppendChild(configElement.OwnerDocument.ImportNode(node, true)); this.DumpXmlToFile(node, string.Format(CultureInfo.CurrentCulture, "{0}.{1}.xml", new object[] { package.Product.ProductCode, package.Culture })); } } } return flag; }