【问题标题】:custom config file in asp.netasp.net 中的自定义配置文件
【发布时间】:2011-11-01 10:27:16
【问题描述】:

在我的项目中,我需要存储复杂的应用程序设置,我不想将其存储在数据库中。

应用程序设置可通过管理 ui 进行编辑/更改等。

所以,如果我将设置存储在 config 中,每次更改配置时,应用程序都会重新启动。

所以第二个想法是从存储在项目中的文件(例如“AppSettings.conf”)加载外部文件。

问题很简单:是否可以在不重新启动应用程序的情况下从外部文件加载和保存设置?

谢谢

【问题讨论】:

  • 您确定要重启应用吗?
  • 答案很简单,你可以做任何你想做的事情,而不是使用ConfigurationManager.AppSettings 你编写你自己的帮助类并读/写一个你可以放在任何地方的 XML 文件。我仍然更喜欢数据库,因为我们有不同的环境,如 Dev、QA、Prod 等,并且每个环境中的设置都不同,我不想冒险在部署新版本时覆盖本地文件。
  • @SaeedNamati 是的,web.config 中的任何动态更改都会在重新启动应用程序之后进行。
  • @DavidePiras Yop,自定义自己的 xml 设置阅读器是一个有趣的想法。但我担心性能读取和保存....
  • 您可以轻松地将 xml 的内容缓存到内存中,以便更快地访问。如果设置要更改,缓存将在应用程序重新启动时清除,您可以恢复新设置。

标签: asp.net configuration settings configuration-files application-settings


【解决方案1】:

是的,将设置存储在 XML 文件中,您可以很好地读取/写入 XML 文件。但是,您不能将存储在 web.config 中的任何现有组件(例如 <authentication><authorization> 元素)指向该 XML 文件......这将不起作用。只有您的自定义设置会。

HTH。

【讨论】:

    【解决方案2】:

    最终决定在 db 中保存/加载应用程序设置。

    【讨论】:

      【解决方案3】:

      与其创建自定义配置文件,不如为 web.config 创建自定义配置部分:

      这里只是一个例子:

      public class SomeConfigurationSection: ConfigurationSection
      {
          [ConfigurationProperty("configurationData")]
          public string ConfigurationData
          {
              get
              {
                  return this["configurationData"] as string;
              }
              set
              {
                  this["configurationData"] = value;
              }
          }
      
          [ConfigurationProperty("otherConfigurationData")]
          public int OtherConfigurationData
          {
              get
              {
                  return Convert.ToInt32(this["otherConfigurationData"]);
              }
              set
              {
                  this["otherConfigurationData"] = value;
              }
          }
      } 
      

      编辑

      另一种可能的解决方案是使用 Properties 文件夹下的 Settings.setttings 文件。我相信您可以从这里添加、编辑和删除设置,而无需重新启动应用程序:

      //add a setting
      Properties.Settings.Default.Context.Add("foo", "bar");
      
      //edit a setting
      Properties.Settings.Default.Context["foo"] = "bar";
      
      //remove a setting
      Properties.Settings.Default.Context.Remove("foo");
      

      您可以在Properties 文件夹下或在Web 应用程序的属性窗口(属性> 设置)中访问此文件。

      【讨论】:

      • 感谢您的回答,但自定义 web 配置部分与运行时经典编辑 web-config 的问题相同...
      • 明白了。用另一个想法修改了我的答案。
      猜你喜欢
      • 1970-01-01
      • 2012-06-18
      • 2010-10-29
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      相关资源
      最近更新 更多