private static void MigrateConfig( string file) { var buffer = new StringBuilder(); buffer.Append(File.ReadAllText(file, new UTF8Encoding(false))); var xdoc = XDocument.Parse(buffer.ToString()); var xelements = xdoc.Root.Elements(); if (xelements.Any(x => x.Name == nameof(GlobalLogFilters))) { var filtersParent = xelements .FirstOrDefault(x => x.Name == nameof(GlobalLogFilters)); var filters = filtersParent.Elements(); var typeNames = LogMessageTypeExtensions.GetNames(); // 消滅したLogTypeを削除する var toRemove = filters .Where(x => !typeNames.Contains(x.Attribute("Key").Value)) .ToArray(); foreach (var e in toRemove) { e.Remove(); } // 新しく増えたLogTypeを追加する var toAdd = typeNames .Where(x => !filters.Any(y => y.Attribute("Key").Value == x)); foreach (var key in toAdd) { var e = new XElement("Filter"); e.SetAttributeValue("Key", key); e.SetAttributeValue("Value", false); filtersParent.Add(e); } } File.WriteAllText(file, xdoc.ToString(), DefaultEncoding); }