c# – 我可以修改[appname] .exe.config而无需手动读/写XMl吗?

我使用.NET 3.5和Visual Studio 2008 Express在C#应用程序中创建了一些设置.我有许多应用程序作用域设置,我希望能够在应用程序中进行修改 – 我可以通过Properties.Settings.Default访问它们,但它们只是按预期读取.我不想让它们成为用户范围的设置,因为它们应该是应用程序范围的.这是否可以在不加载
XML和自己读/写的情况下实现?

我见过使用System.Configuration.ConfigurationManager.OpenExeConfiguration的示例,但是配置xml的格式与我正在使用的格式不同(这是旧版本的吗?)

谢谢

编辑

我发现我可以修改这样做的值,但这似乎是一个荒谬的黑客.

Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
SettingElementCollection settingElements = ((ClientSettingsSection)config.GetSectionGroup("applicationSettings").Sections[0]).Settings;

SettingElement element = settingElements.Get("SettingName");
element.Value.ValueXml.InnerText = "new value";

config.Save(ConfigurationSaveMode.Modified, true);

最佳答案
OpenExeConfiguration(或任何其他ConfigurationManager方法)是大多数配置文件修改的首选入口点.获得配置实例后,您应该获得要修改的部分,并在修改后调用任何
ConfigurationManager.Save方法.但是,无法以这种方式检索applicationSettings部分.

没有用于更改app.config文件中applicationSettings部分的设置的API.只能以这种方式更改用户范围的设置.

因此,实际上只能通过直接操作app.config XML文件来更改这些设置.

由于Properties.Settings.Default中的索引属性实际上是可写的,因此可能会出现一些混淆.以下是完全合法的:

Properties.Settings.Default["MySetting"] = "New setting value";
Properties.Settings.Default.Save();

但是,该设置将不会保存.

点赞