我使用.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();
但是,该设置将不会保存.