C# Config order AppSettings 保存前

C# Config order AppSettings before saving

有没有办法在保存文件之前按键名对 AppSettings 进行排序?

我尝试过的:

Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
UpdateSetting(config, "LocalLastUpdate", remoteSettingLastUpdated);
config.AppSettings.Settings.AllKeys.OrderBy(r => r);  //this will not work b/c it's just the keys
config.Save(ConfigurationSaveMode.Minimal);


private static void UpdateSetting(Configuration config, string name, string value)
{
    Log.Debug("Updating Local Settings [" + name + "] -> '" + value + "'");
    config.AppSettings.Settings.Remove(name);
    config.AppSettings.Settings.Add(name, value);
}

示例:

<appSettings>
   <add key="LocalSettingsLastUpdate" value="9/30/2021 11:27:13 PM" />
   <add key="Printer_DefaultLogo" value="Y" />
   <add key="Signature_Width" value="300" />
</appSettings>

在我 运行 代码将设置添加到配置并点击保存后,我得到了这个:

<appSettings>
   <add key="LocalSettingsLastUpdate" value="9/30/2021 11:27:13 PM" />
   <add key="Printer_DefaultLogo" value="Y" />
   <add key="Signature_Width" value="300" />
   <add key="LocalLastUpdate" value="10/1/2021 11:27:14 PM" />  <- this should be at the top
</appSettings> 

此代码已在 Visual Studio 中测试并且可以正常工作

public void AddUpdateSortAppSettings(List<(string, string)> newSettings)
 {
 var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

             var appSettings = configFile.AppSettings;

            if (appSettings.Settings.Count == 0) return ;  //error

            var settings = new List<(string, string)>();
            foreach (var key in appSettings.Settings.AllKeys)
            {
                settings.Add((appSettings.Settings[key].Key, appSettings.Settings[key].Value));
                appSettings.Settings.Remove(key);
            }

            for (var i = 0; i < newSettings.Count; i++)
            {
                var found = false;
                for (var j = 0; j < settings.Count; j++)
                {
                    if (settings[j].Item1 == newSettings[i].Item1) 
                     {
                     settings[j] = newSettings[i];
                    found = true;
                     }
                }
                if (!found) settings.Add(newSettings[i]);
            }

            var existingSettings = settings.OrderBy(i => i.Item1);

            foreach (var item in existingSettings)
            {
                appSettings.Settings.Add(item.Item1, item.Item2);
            }

            configFile.Save(ConfigurationSaveMode.Modified);

            ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
}

使用它

var newSettings= new List<(string, string)>{("LocalLastUpdate","10/1/2022 11:27:14 PM")};
AddUpdateSortAppSettings(newSettings);