C# 修改自定义app.config配置部分并保存它

C# 修改自定义app.config配置部分并保存它,c#,config,configuration-management,C#,Config,Configuration Management,我正在用.NET Framework 4.6.1开发一个C#WPF MVVM应用程序,我在App.config中有一个自定义部分: 我想从我的应用程序中修改PrinterSpeed和CameraSpeed。我尝试过以下代码: static void AddUpdateAppSettings(string key, string value) { try { var configFile = ConfigurationManager.OpenExeConfigu

我正在用.NET Framework 4.6.1开发一个C#WPF MVVM应用程序,我在App.config中有一个自定义部分:


我想从我的应用程序中修改
PrinterSpeed
CameraSpeed
。我尝试过以下代码:

static void AddUpdateAppSettings(string key, string value)
{
    try
    {
        var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        var settings = configFile.AppSettings.Settings;
        if (settings[key] == null)
        {
            settings.Add(key, value);
        }
        else
        {
            settings[key].Value = value;
        }
        configFile.Save(ConfigurationSaveMode.Modified);
        ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
    }
    catch (ConfigurationErrorsException)
    {
        Console.WriteLine("Error writing app settings");
    }
}
但它不起作用,因为我没有修改
AppSettings
部分


如何修改这些值?

您应该使用ConfigurationSection类。本教程可能会有所帮助:

System.Configuration.NameValueSectionHandler
很难使用。您可以将其替换为
System.Configuration.appsetings部分
,而无需触摸其他任何内容:

<configuration>
    <configSections>
        <section name="SpeedSection" type="System.Configuration.AppSettingsSection" />
    </configSections>
    <SpeedSection>
        <add key="PrinterSpeed" value="150" />
        <add key="CameraSpeed" value="150" />
    </SpeedSection>
</configuration>

我加上这个作为一个评论,因为它不是对你问题的真正回答,但可能会帮助你。您是否考虑过非常尴尬和令人沮丧的Microsoft解决方案的替代方案。有更好的应用程序配置备选方案,例如NuGet Urchin包。我不确定我是否理解该教程,但我知道如何访问该配置数据,但我不知道如何修改它并将更改保存在App.config上。在代码中,您正在访问AppSettings部分并编辑它var settings=configFile.AppSettings.settings;您应该创建自定义配置节类,并使用SpeedSection settings=ConfigurationManager.GetSection(“SpeedSection”)作为SpeedSection进行访问,然后可以将其保存为您现在正在执行的操作。我正在执行
((AppSettingsSection)configFile.GetSection(“SpeedSection”)。设置和我得到的错误:
无法将“System.Configuration.KeyValueInternalCollection”转换为“System.Configuration.AppSettingsSection”。
我确实按照答案中的描述测试了这段代码,并确保它能正常工作。可能您已经更改\添加了一些内容?是的,对不起。这是我的错误。
static void AddUpdateAppSettings(string key, string value)
{
    try
    {
        var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        var settings = ((AppSettingsSection) configFile.GetSection("SpeedSection")).Settings;                                
        if (settings[key] == null)
        {
            settings.Add(key, value);
        }
        else
        {
            settings[key].Value = value;
        }
        configFile.Save(ConfigurationSaveMode.Modified);
        ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
    }
    catch (ConfigurationErrorsException)
    {
        Console.WriteLine("Error writing app settings");
    }
}