在我的c#Windows窗体应用程序(.net 3.5 / VS 2008)中,我有3个设置文件,产生一个user.config文件。
一个设置文件由较大的数据组成,但很少更改。频繁更改的数据非常少。但是,由于保存设置总是写入整个(XML)文件,因此总是“慢”。
SettingsSmall.Default.Save(); // slow, even if SettingsSmall consists of little data
我能否以某种方式配置设置以产生两个文件,从而产生:
SettingsSmall.Default.Save(); // should be fast
SettingsBig.Default.Save(); // could be slow, is seldom saved
我已经看到我可以使用SecionInformation类进行进一步的自定义,但对我来说最简单的方法是什么?这可以通过更改app.config(config.sections)吗?
---添加了有关App.config的信息
我得到一个文件的原因可能是App.config中的configSections。这是它的外观:
<configSections> <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <section name="XY.A.Properties.Settings2Class" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> <section name="XY.A.Properties.Settings3Class" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> </sectionGroup> </configSections>
当我添加第2和第3个设置文件时,我得到了这些部分。我没有注意到这一点,所以它在某种程度上是VS 2008的默认值。单个user.config有这3个部分,它绝对是透明的。
只有我不知道如何告诉App.config创建三个独立的文件而不是一个。我已经使用上面的app.config“玩了”,但是当我删除配置部分时,我的应用程序终止,但有异常。
答案 0 :(得分:1)
正如您已经发现的,VS在编译时将项目中的所有配置和设置文件放入一个大的applicationname.exe.config
文件中,据我所知,您无法将另一个配置文件作为“主要文件”加载。
一种解决方案是拥有自己的设置类实现,并让它加载另一个文件。
另一种方法是在ConfigurationManager中使用OpenMappedExeConfiguration方法。您可以使用
加载配置文件并访问其appsetting值ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = "test.config";
Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
var section = ((AppSettingsSection)configuration.GetSection("appSettings")).Settings;
foreach (string key in section.AllKeys) {
Console.WriteLine("{0}={1}", key, section[key].Value);
}
您应该能够获得自定义部分并在其上使用Save方法。
答案 1 :(得分:0)
If it is slow , instead of doing in single file you can do it in multiple user.config.
注意:但是当我处理user.settings时,我发现了一个难题,一旦卸载了应用程序,设置就不会从保存的位置中删除,只有管理权限用户才能访问这些文件。因此,请确保您的设置文件是否需要
答案 2 :(得分:0)
最终我使用了自己的设置提供程序来实现我的目标: 我发现两个资源最有用,开始编写这样的提供程序
我使用了2中的一些修改版本。我可以为每个设置设置要使用的提供程序,所以我坚持使用这种方法。但是,我试图避免长时间编写自己的提供程序,但每当我查看这个主题时,我发现根本没有更好的方法将这些部分拆分成独立的文件。
然而,我也发现Patrick的方法很有趣,并且我会尽快给它一个试验。谢谢!