ASP.NET web.config:configSource 与文件属性
Posted
技术标签:
【中文标题】ASP.NET web.config:configSource 与文件属性【英文标题】:ASP.NET web.config: configSource vs. file attributes 【发布时间】:2011-10-19 21:07:08 【问题描述】:在 ASP.NET 应用程序的 web.config
文件中,某些配置部分(如 appSettings
和 connectionStrings
)支持属性 file
和 @987654325 @。
使用 file
属性和 configSource
属性有什么区别?什么时候应该使用哪个属性,可以同时使用吗?
<?xml version="1.0"?>
<configuration>
<appSettings file="AppSettings.config">
</appSettings>
<connectionStrings configSource="ConnectionStrings.config">
</connectionStrings>
<!-- ... -->
</configuration>
【问题讨论】:
【参考方案1】:file
属性
appSettings
部分
将合并(并覆盖).config 文件中的设置
修改指定文件时不会导致web应用重启
http://msdn.microsoft.com/en-US/library/ms228154(v=vs.100).aspx
使用Configuration.AppSettings.Settings.Add API 将导致在Configuration.Save 调用上将所有设置合并回主.config
。
从 .NET 1.1 开始
如果文件不存在,则不会抛出异常。
configSource
属性
appSettings
将用外部文件覆盖整个部分,不合并
CAN cause web application to restart
http://msdn.microsoft.com/en-US/library/system.configuration.sectioninformation.configsource(v=vs.100).aspx
使用Configuration.AppSettings.Settings.Add API 将导致在Configuration.Save 调用上将所有设置添加到configSource
中指定的文件中。
从 .NET 2.0 开始
如果配置源文件不存在,则抛出System.Configuration.ConfigurationErrorsException
。
file
属性指定包含自定义设置的外部文件,就像您在 web.config 文件的 appSettings 条目中所做的那样。
同时,configSource
属性中指定的外部文件包含您为其声明 configSource 的部分的设置。例如,如果您使用 pages 部分的configSource
属性,则外部文件将包含 pages 部分的设置。
在指定的外部配置中声明的自定义设置
file
属性将与appSettings
中的设置合并web.config
文件中的部分。与此同时,configSource
不是否支持合并,这意味着您必须移动整个 部分设置到外部文件中。
http://www.codeproject.com/Messages/1463547/Re-difference-between-configSource-and-file-attrib.aspx
【讨论】:
此外,“文件”属性允许您在直接目录树之外指定文件,这对于在不同站点之间共享通用设置很重要。不幸的是,“configsource”属性将您限制在当前树中的文件中,因此对于共享设置,您需要在 IIS 中指定一个虚拟目录。 我上面的评论并不完全正确,我显然错过了编辑它的有点随意的五分钟窗口!您不能在 IIS 中设置虚拟目录以允许“configsource”文件位于直接目录树之外。所以这确实是非常有限的。我通过使用连接点(或 NTFS 硬链接)解决了它,但它并不完全漂亮...... 我想添加到 configSource 列表:It must refer to a file in the same directory or in a subdirectory as the configuration file.
。还有文件列表:It can reside outside the directory of the configuration file itself.
.
如果对 Save()
的调用将值写入主 .config 文件,但这些值被外部文件中的(旧)值覆盖,那么这种设计如何不被严重破坏?我错过了什么吗?
更新了 appSettings 元素的链接 - docs.microsoft.com/en-us/dotnet/framework/configure-apps/…以上是关于ASP.NET web.config:configSource 与文件属性的主要内容,如果未能解决你的问题,请参考以下文章
asp.net Web.config中assembly注册程序集的目的