来自Asp.net精英论坛:bbs.1aspx.com
网上有好多关于自己解析xml文件来修改web.config的办法,这些暂且不说。
我看的资料里也有用Configuration与ConfigurationManager.OpenExeConfiguration修改配置文件的方法。但是都讲的没头没尾的,真是搞不懂。可能他们都说的是应用程序吧。
一、ConfigurationManager.OpenExeConfiguration的问题
ConfigurationManager.OpenExeConfiguration有两个重载,
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal)
和
ConfigurationManager.OpenExeConfiguration(Server.MapPath("web.config"));
经过实验我发现,在网上上,ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal)不能使用,而Configuration和ConfigurationManager.OpenExeConfiguration其实不能直接对文件进行修改。
Configuration cfg
=
ConfigurationManager.OpenExeConfiguration(Server.MapPath(
"
web.config
"
));
Response.Write(cfg.FilePath);
你会发现以上代码输出的FilePath是F:/路径/Web/web.config.config 。打开的文件虽然看的是 web.config,其实是另外一个文件web.config.config,虽然web.config.config并不存在。
而进行以下操作
Configuration cfg
=
ConfigurationManager.OpenExeConfiguration(Server.MapPath(
"
web.config
"
));
cfg.AppSettings.Settings.Remove(
"
123
"
);
cfg.AppSettings.Settings.Add(
"
123
"
,
"
asdasd
"
);
cfg.Save()
;
<?
xml version
=
"
1.0
"
encoding
=
"
utf-8
"
?>
<
configuration
>
<
appSettings
>
<
add key
=
"
123
"
value
=
"
asdasd
"
/>
</
appSettings
>
</
configuration
>
二、引出来的思路
可以建立个文件 web.config.config,作为web.config的副本。
再次执行
Configuration cfg
=
ConfigurationManager.OpenExeConfiguration(Server.MapPath(
"
web.config
"
));
cfg.AppSettings.Settings.Remove(
"
123
"
);
cfg.AppSettings.Settings.Add(
"
123
"
,
"
asdasd
"
);
Response.Write(cfg.FilePath);
cfg.SaveAs(Server.MapPath(
"
web.config
"
));
这可能是.net 2.0的一个bug吧,呵呵
本文探讨了使用.NET Framework中ConfigurationManager.OpenExeConfiguration方法修改web.config文件的实践技巧,并提出了一种通过创建web.config副本来进行安全修改的方法。
1089

被折叠的 条评论
为什么被折叠?



