在 web.config 或 app.config 中存储分层应用程序设置

Posted

技术标签:

【中文标题】在 web.config 或 app.config 中存储分层应用程序设置【英文标题】:storing hierarchical application settings in web.config or 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 文件与应用设置无关吗?

【问题讨论】:

msdn.microsoft.com/en-us/library/2tw134k3.aspx 或google.com/search?q=ConfigurationSection 或***.com/a/52252862/1767482 【参考方案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。

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

How to: Create Custom Configuration Sections Using ConfigurationSection Custom Configuration Sections in 3 Easy Steps Creating Custom Configuration Sections In ASP.NET

【讨论】:

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

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

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

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

    将 xml 存储在配置部分(参见上面的答案)

    使用 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")
    试试NConfig 项目

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

以上是关于在 web.config 或 app.config 中存储分层应用程序设置的主要内容,如果未能解决你的问题,请参考以下文章

从 .NET 中的 app.config 或 web.config 读取设置

在Web.config或App.config中的添加自定义配置

在Web.config或App.config中的添加自定义配置

在Web.config或App.config中的添加自定义配置

如何在visual studio解决方案中查看app.config或web.config中对键的所有引用/调用?

使用链接文件的 App 或 Web Config 中的 AppSettings