在 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中的添加自定义配置