【问题标题】:storing hierarchical application settings in web.config or app.config在 web.config 或 app.config 中存储分层应用程序设置
【发布时间】:2012-02-02 11:21:41
【问题描述】:

我需要将我的应用程序配置设置以分层格式存储在 web.config 或 app.config 中。这可能吗?或者我必须将它存储在一些 XML 文件或数据库中并使用它来代替?简单的名称值对格式对我来说是不够的。

    <appSettings>
        <Report1>
          <add key="SourceFilePath" value="value1" />
          <add key="DestinationFolderPath" value="value2" />
        </Report1>
        <Report2>
          <add key="SourceFilePath" value="value1" />
          <add key="DestinationFolderPath" value="value2" />
        </Report2>
   </appSettings>

这是一个基于 Web 的报告应用程序,我需要存储源文件、SSIS 包、FTP 服务器详细信息等的文件路径。

更新:如果我选择自定义配置部分选项,我可以将设置存储在单独的文件中以保持主 web.config 文件与应用设置无关吗?

【问题讨论】:

标签: c# asp.net configuration web-config app-config


【解决方案1】:

您不能向appSettings 添加自定义元素。

实现自定义格式的最佳方法是编写您自己的ConfigurationSettings 类并在配置中使用它。

这将允许您以强类型的方式存储数据,并具有有意义的元素和属性名称。

请参阅 MSDN 上的 How to: Create Custom Configuration Sections Using ConfigurationSection

【讨论】:

  • 谢谢。看起来我需要为它写很多代码。如果有更简单的替代解决方案会很好
  • 如果我选择这种方法,是否可以将应用程序设置保存在单独的文件中?
  • @RKP - 是的,这是免费的(请参阅ConfigSource 属性)。就像您可以为 connectionStrings 部分创建一个单独的文件一样。
  • 我的意思是将所有应用程序设置存储在一个文件中,而不是每个部分一个文件(在我的示例中为报告)。这可能吗?
  • @RPK - 如果您的部分是这些设置的集合,那么是的。
【解决方案2】:

你不能按照你的建议那样做。

你可以做的是按元素的键名分组:

<appSettings>
      <add key="Report1:SourceFilePath" value="value1" />
      <add key="Report1:DestinationFolderPath" value="value2" />
      <add key="Report2:SourceFilePath" value="value1" />
      <add key="Report2:DestinationFolderPath" value="value2" />
</appSettings>

最好的方法是定义自己的ConfigurationSection。

这里有一些关于这个的链接:

【讨论】:

  • 如果我选择这种方法,是否可以将应用程序设置保存在单独的文件中?
  • 哪种方法?特殊键名或配置部分?
【解决方案3】:

您不能按照您在 appsettings 中建议的方式存储 xml 元素。 如果您需要如上所述的层次结构,请尝试以下方法之一

  1. 将整个 xml 元素存储在 appsettings 中并解析 xml

    <appSettings>
      <add key="Report1" value="<Report1 SourceFilePath=""value1"" DestinationFolderPath=""value2"" />" />
      <add key="Report2" value="<Report2 SourceFilePath=""value1"" DestinationFolderPath=""value2"" />" />
    </appSettings>
    
  2. 将 xml 存储在配置部分(参见上面的答案)

  3. 使用 DslConfig 项目。
    使用 NuGet 添加它,并查看添加 AppSpike 以获取示例。
    在您的情况下,您可以创建一个 ReportConfig 类并将此类用作配置类。
    示例:

    public class Report {
      string SourceFilePath { get; set; }
      string DesinationFolderPath { get; set; }
    }
    

在 Variables.var 中创建一个配置文件条目

   import ReportClassNamespace from ReportClassAssembly

   Var["Report1"] = Report(SourceFilePath:"value1",DesinationFolderPath:"value2")
   Var["Report2"] = Report(SourceFilePath:"value1",DesinationFolderPath:"value2")
  1. 试试NConfig 项目

【讨论】:

    【解决方案4】:

    我知道的最佳方法是创建您自己的 Settings 类并对其进行序列化/去序列化,以便读/写您的应用程序。设置。

    您也可以使用管理员。您网站的页面以将所有设置保存到其中。

    在您的情况下,最好使用数据库来保存所有设置。

    【讨论】:

      猜你喜欢
      • 2020-06-01
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      相关资源
      最近更新 更多