61 if (!Directory.Exists(cscfgPath))
62 throw new ArgumentException(cscfgPath +
" must exist");
64 outPath = outPath ?? cscfgPath;
65 if (!Directory.Exists(outPath))
66 throw new ArgumentException(outPath +
" must exist");
68 foreach (var env
in config.Environments)
70 var envName = env.Value.EnvName;
72 var doc = XDocument.Load(Path.Combine(cscfgPath, string.Format(
CscfgNameFmt,
"")));
74 foreach (var role
in env.Value.Roles)
76 var roleName = role.Value.RoleName;
77 var roleNode = (from e in doc.Descendants()
78 where (
string)e.Attribute("name") == roleName
79 select e).FirstOrDefault();
81 throw new ArgumentException("Unable to find role " + roleName);
84 var instances = roleNode.Element(rootNS +
"Instances");
85 if (instances == null)
87 Trace.TraceWarning(
"Adding Instances node for {0}", roleName);
88 instances =
new XElement(rootNS +
"Instances");
89 roleNode.AddFirst(instances);
91 var countAttr = instances.Attribute(
"count");
92 if (countAttr == null)
94 countAttr =
new XAttribute(
"count", role.Value.Instances);
95 instances.Add(countAttr);
99 countAttr.Value = role.Value.Instances.ToString();
102 var settings = roleNode.Element(rootNS +
"ConfigurationSettings");
103 if (settings == null)
105 Trace.TraceWarning(
"Adding ConfigurationSettings node for {0}", roleName);
106 settings =
new XElement(rootNS +
"ConfigurationSettings");
107 roleNode.Add(settings);
109 foreach (var setting
in role.Value.ConfigSettings.Settings.OrderBy(x => x.Key))
111 AddOrUpdateSetting(settings, rootNS, setting.Key, setting.Value);
113 foreach (var setting
in role.Value.ConfigSettings.MissingSettings.OrderBy(x => x))
115 AddOrUpdateSetting(settings, rootNS, setting,
string.Empty);
120 using (var writer = XmlWriter.Create(Path.Combine(outPath, cscfgName),
new XmlWriterSettings() { Indent =
true }))
const string DefaultEnvName
static XNamespace GetRootNamespace(XDocument doc)
const string CscfgNameFmt