文档章节

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

产品哥
 产品哥
发布于 2015/11/09 11:22
字数 535
阅读 1287
收藏 0

每个网站里都会有一个web.config文件。修改Web.config文件会导致IIS重启,就是随意的回车一下也会导致重启。微软建议,不要将需要修改的配置内容保存在web.config中。而是单独放在一个config中。

但是对于单独存放的config文件,怎么来对其进行修改和读取呢? 例如 可以指定 web.config 中的 appSetting 单独放在 一个 app-1.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="oschina"/>
    <add key="SiteDomain" value="oschina.net"/>
  </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="app-1.config" />
<connectionStrings/>
  <system.web>
    <compilation debug="false">
    </compilation>
    <authentication mode="Windows" />
  </system.web>
</configuration>


2)第二个config文件:app-1.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="oschina"/>
<add key="SiteDomain" value="oscina.net"/>
</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;



修改Config值:

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重启。

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

注意app-1.config的写法。
一旦在web.config中的appSettings节点中添加configSource,就不能再添加Add节点了。也就是说你不能在webconfig里放一部分<add>,然后再config.config里在放一部分<add> 修改时,访问的节点必须存在否则会报:未将对象引用设置到对象的实例。

© 著作权归作者所有

产品哥
粉丝 81
博文 167
码字总数 191806
作品 1
杭州
CTO(技术副总裁)
私信 提问
asp.net中web.config巧妙使用appSetting和connectionStrings

connectionStrings: 一般情况下connectionStrings都是数据库连接字符串的首选,因为它有存放数据库的优势 1、可以加密(传送门)。 2、切换数据库平台方便,如换为Oracle数据库,只需修改pro...

我吃火锅你吃调料-快给我打钱-房子不要钱
2015/11/09
364
0
C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\文件不断增长,如何处理?

很久没有写博了。最近半年除了忙活布置新家和过年期间走亲访友之外,都是在公司处理一些项目中的杂事;连家里买的很多书都停下来没看了,感觉这段时间在事业和学习上一直都是忙忙碌碌,却又碌...

科技小毛
2017/11/14
0
0
如何:创建同步/异步 HTTP 处理程序

来源:MSDN 一、如何:创建同步 HTTP 处理程序 本主题阐释一个 HTTP 处理程序的代码,该处理程序对 ASP.NET 应用程序中其 URL 以 .sample 结尾的资源执行同步请求处理。此代码示例阐释了...

夏春涛
2008/01/23
0
0
奇技淫巧 上传web.config文件获取远程代码执行权限

        本文讲述的是,我通过上传一个web.config文件,绕过目标测试网站的黑名单机制,突破执行权限限制,实现ASP代码运行获取远程代码执行权限。   前言   无聊的学校实习期,做...

FreeBuf
2018/06/15
0
0
细谈asp.net如何处理应用程序-----c#菜鸟日记

关于asp.net的很多,如:《asp.net典型模块开发》,还有《asp.net项目与典型模块开发》,《asp.net系统精髓》,这些书都是学习asp.net很好的书,做asp.net项目要用到,这些都可用c#编程语言开...

crossmix
2016/03/23
26
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
12
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
59
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部