private string GetUpdatedSectionDeclarationXml(FactoryRecord factoryRecord, ConfigurationSection configSection, ConfigurationSaveMode saveMode) {
StringBuilder sb = new StringBuilder();
sb.Append('<');
sb.Append(KEYWORD_SECTION);
sb.Append(' ');
AppendAttribute(sb, KEYWORD_SECTION_NAME, configSection.SectionInformation.Name);
AppendAttribute(sb, KEYWORD_SECTION_TYPE, (configSection.SectionInformation.Type != null) ? configSection.SectionInformation.Type : factoryRecord.FactoryTypeName);
if ( !configSection.SectionInformation.AllowLocation ||
(saveMode == ConfigurationSaveMode.Full) ||
((saveMode == ConfigurationSaveMode.Modified) &&
configSection.SectionInformation.AllowLocationModified)) {
AppendAttribute(sb,
KEYWORD_SECTION_ALLOWLOCATION,
configSection.SectionInformation.AllowLocation ?
KEYWORD_TRUE :
KEYWORD_FALSE);
}
if ((configSection.SectionInformation.AllowDefinition != ConfigurationAllowDefinition.Everywhere) ||
(saveMode == ConfigurationSaveMode.Full) ||
(saveMode == ConfigurationSaveMode.Modified && configSection.SectionInformation.AllowDefinitionModified)) {
string v = null;
switch (configSection.SectionInformation.AllowDefinition) {
case ConfigurationAllowDefinition.Everywhere:
v = KEYWORD_SECTION_ALLOWDEFINITION_EVERYWHERE;
break;
case ConfigurationAllowDefinition.MachineOnly:
v = KEYWORD_SECTION_ALLOWDEFINITION_MACHINEONLY;
break;
case ConfigurationAllowDefinition.MachineToWebRoot:
v = KEYWORD_SECTION_ALLOWDEFINITION_MACHINETOWEBROOT;
break;
case ConfigurationAllowDefinition.MachineToApplication:
v = KEYWORD_SECTION_ALLOWDEFINITION_MACHINETOAPPLICATION;
break;
}
AppendAttribute(sb, KEYWORD_SECTION_ALLOWDEFINITION, v);
}
if ((configSection.SectionInformation.AllowExeDefinition !=
ConfigurationAllowExeDefinition.MachineToApplication ) ||
(saveMode == ConfigurationSaveMode.Full) ||
(saveMode == ConfigurationSaveMode.Modified && configSection.SectionInformation.AllowExeDefinitionModified)) {
AppendAttribute( sb,
KEYWORD_SECTION_ALLOWEXEDEFINITION,
ExeDefinitionToString(
configSection.SectionInformation.AllowExeDefinition )
);
}
if (!configSection.SectionInformation.RestartOnExternalChanges) {
AppendAttribute(sb, KEYWORD_SECTION_RESTARTONEXTERNALCHANGES, KEYWORD_FALSE);
}
else if ((saveMode == ConfigurationSaveMode.Full) ||
(saveMode == ConfigurationSaveMode.Modified && configSection.SectionInformation.RestartOnExternalChangesModified)) {
AppendAttribute(sb, KEYWORD_SECTION_RESTARTONEXTERNALCHANGES, KEYWORD_TRUE);
}
if (!configSection.SectionInformation.RequirePermission) {
AppendAttribute(sb, KEYWORD_SECTION_REQUIREPERMISSION, KEYWORD_FALSE);
}
else if ((saveMode == ConfigurationSaveMode.Full) ||
(saveMode == ConfigurationSaveMode.Modified && configSection.SectionInformation.RequirePermissionModified)) {
AppendAttribute(sb, KEYWORD_SECTION_REQUIREPERMISSION, KEYWORD_TRUE);
}
sb.Append("/>");
return sb.ToString();
}