ASP.NET一个网站内存放多个config文件(Web.Config文件中configSource 的用法

本文探讨了ASP.NET网站中使用多个config文件进行配置管理的方法,包括如何将appSettings部分拆分到独立的config.config文件中,并通过configSource属性进行引用。详细介绍了如何在web.config中设置configSource,以及如何读取和修改这些配置文件,避免了全局配置更改导致的IIS重启问题。
ASP.NET一个网站内存放多个config文件(Web.Config文件中configSource 的用法)
2011年08月10日 星期三 上午 11:41

每个网站里都会有一个web.config文件。修改Web.config文件会导致IIS重启,就是随意的回车一下也会导致重启。微软建议,不要将需要修改的配置内容保存在web.config中。而是单独放在一个config中。但是对于单独存放的config文件,怎么来对其进行修改和读取呢? 例如 可以指定 web.config 中的 appSetting 单独放在 一个 config.config 文件中。通过 configSource 来指定。

一、原来的web.config文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="CacheTimeInfo" value="30" />
    <add key="CacheTimeNews" value="10" />
    <add key="CacheTimeProduct" value="60" />
    <add key="CacheTimeTrade" value="5" />
    <add key="SiteName" value="中国叉叉网"/>
    <add key="SiteDomain" value="chinaxx.com"/>
  </appSettings>
  <connectionStrings/>
  <system.web>
    <compilation debug="false">
    </compilation>
    <authentication mode="Windows" />
  </system.web>
</configuration>

二,下面拆分成两个config文件

1)第一个config文件:web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings configSource="config.config" />
<connectionStrings/>
  <system.web>
    <compilation debug="false">
    </compilation>
    <authentication mode="Windows" />
  </system.web>
</configuration>

2)第二个config文件:config.config

<?xml version="1.0" encoding="utf-8"?>
<appSettings>
<add key="CacheTimeInfo" value="30" />
<add key="CacheTimeNews" value="10" />
<add key="CacheTimeProduct" value="60" />
<add key="CacheTimeTrade" value="5" />
<add key="SiteName" value="中国叉叉网"/>
<add key="SiteDomain" value="chinaxx.com"/>
</appSettings>

那么如何读取呢?

Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
string SiteName = config.AppSettings["SiteName"];

如果用上面这种方法会报错:CS0122: “System.Configuration.ConfigurationElement.this[System.Configuration.ConfigurationProperty]”不可访问,因为它受保护级别限制
正确的写法是:

Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
string SiteName = config.AppSettings.Settings["SiteName"].Value;

下面是修改:

Configuration cfg = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
AppSettingsSection appSetting = cfg.AppSettings;
appSetting.Settings["SiteName"].Value = "changed by application"; //修改config.config中SiteName的值
cfg.Save();

总结:经过拆分后,修改config.config不会导致IIS重启。

说明:我的config.config文件和webconfig在同一级目录,另外,我这里叫config.config,你可以随意改变,比如叫app.config。

注意config.config的写法。

一旦在web.config中的appSettings节点中添加configSource,就不能再添加Add节点了。也就是说你不能在webconfig里放一部分<add>,然后再config.config里在放一部分<add>

修改时,访问的节点必须存在否则会报:未将对象引用设置到对象的实例。

参考:http://tangzhongxin.blog.163.com/blog/static/8921961201031711174015/

http://bbs.51aspx.com/showtopic-1923.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值