2

在我的 c# Windows Forms 应用程序(.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

我已经看到我可以使用 SesionInformation 类进行进一步定制,但是对我来说最简单的方法是什么?这是否可以通过更改 app.config (config.sections) 来实现?

--- 添加了关于 App.config 的信息

我得到一个文件的原因可能是 App.config 中的 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>

当我添加第二个和第三个设置文件时,我得到了这些部分。我没有注意到这一点,所以它在某种程度上是 VS 2008 的默认设置。单个 user.config 有这 3 个部分,它是绝对透明的。

只有我不知道如何告诉 App.config 创建三个独立的文件而不是一个。我已经“玩弄”了上面的 app.config,但是例如,当我删除配置部分时,我的应用程序会因异常而终止。

4

3 回答 3

1

正如您已经发现的那样,VSapplicationname.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 方法。

于 2010-06-01T13:31:34.827 回答
0

最终,我使用了自己的设置提供程序来实现我的目标:我发现两个最有用的资源开始编写这样的提供程序

  1. www.codeproject.com/KB/vb/CustomSettingsProvider.aspx?msg=2934144#xx2934144xx
  2. www.blayd.co.uk/download.aspx?pageid=1013

我使用了 1 的修改版本。使用了 2 中的一些诀窍。我可以为每个设置设置要使用的提供程序,所以我坚持使用这种方法。但是,很长一段时间以来,我一直试图避免编写自己的提供程序,但是每当我检查这个主题时,我发现根本没有更好的方法将这些部分拆分为独立的文件。

但是,我也发现 Patrick 的方法很有趣,我会尽快尝试一下。谢谢!

于 2010-06-02T18:34:11.627 回答
0
If it is slow , instead of doing in single file you can do it in multiple user.config.

注意:但是当我处理 user.settings 时,我发现了一个困难,一旦应用程序被卸载,设置不会从保存的位置删除,并且只有管理权限用户才能访问这些文件。所以请确保您的设置文件是否需要

于 2010-05-10T17:13:31.923 回答