Configuration类在网页实现对web.config的修改(可能是2.0一个bug)

网上有好多关于自己解析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()
;
读不出web.config的内容,而实际上是读的web.config.config的内容。我们现在没这个文件,那么内容就是空的。保存之后,得到
<?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吧,呵呵

http://www.cnblogs.com/birdshover
谢平
2006年10月16日

posted on 2006-10-16 14:56 Birdshover 阅读(1859) 评论(10)  编辑 收藏 所属分类: ASP.Net2.0

评论

#1楼  2006-10-16 15:05 sunyc [未注册用户]

你自己写的有问题
参考我写的代码

using System.Configuration;
using System.Web.Configuration;
using System.IO;
/// <summary>
/// SystemConfig 的摘要说明
/// </summary>
public static class SystemConfig
{
private static Configuration ConfigFile;
private static KeyValueConfigurationCollection SysConfig;

static SystemConfig()
{
ConfigFile = WebConfigurationManager.OpenWebConfiguration("/");
SysConfig = ConfigFile.AppSettings.Settings;
}

public static void set(string module, string key, string value)
{
KeyValueConfigurationElement el = SysConfig[module + "_" + key];
if (el == null)
{
SysConfig.Add(module + "_" + key, value);
}
else
{
el.Value = value;
}

//同步更新
ConfigFile.Save();
}
  回复  引用    

#2楼  2006-10-16 15:07 sunyc [未注册用户]

完全可以自己更新Web.config,只需要对它有写权限就行了   回复  引用    

#3楼  2006-10-16 15:31 aspnetx      

IIS不对其进行保护吗?   回复  引用  查看    

#4楼  2006-10-16 22:25 ff [未注册用户]

楼上的,难道对自己使用自己的东西也限制吗?   回复  引用    

#5楼  2006-10-17 18:18 overred[匿名] [未注册用户]

http://www.cnblogs.com/overred/archive/2006/02/18/333004.html   回复  引用    

#6楼  2006-12-14 22:44 Jason Cui      

如果修改了config文件,是不是会引进项目的重新编译?导致网站死掉几分钟?   回复  引用  查看    

#7楼  2007-01-24 14:25 lance [未注册用户]

OpenExeConfiguration方法的另外一个重载:
public static Configuration OpenExeConfiguration (
string exePath
)
,其中exePath参数要求提供的是可执行文件的路径,比如我的项目属性为windows application,项目名称为MyExe,编译后的文件名为MyExe.exe,那么我的调用就是:
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration("MyExe.exe");
然后,读到的Configuration文件是MyExe.exe.config。
  回复  引用    

#8楼 [楼主] 2007-01-24 19:27 BirdsHover      

我也知道微软大概是这个意思,但是程序员不一定都知道.那么如果出现使用这种情况而问题解决不了怎么办?要么干脆不能用,至少也要提示一下.要么就要对的.   回复  引用  查看    

#9楼  2008-04-28 19:46 王斌      

不错呀,我用的是别的config代替 但不能修改。   回复  引用  查看    

#10楼  2008-05-07 16:11 塞外风      

这样就可以了。很简单的。你用的那个是让你指定EXE程序,然后他自动去找config文件。所以出现了你的情况。

ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = configfilepath;
ConfigFile = ConfigurationManager.OpenMappedExeConfiguration( map, ConfigurationUserLevel.None );
SysConfig = ConfigFile.AppSettings.Settings;

KeyValueConfigurationElement el = SysConfig[key];
if (el == null)
{
SysConfig.Add(key, value);
}
else
{
el.Value = value;
}

//同步更新
ConfigFile.Save();   回复  引用  查看    

导航

公告

网名: yurow birdshover
       无术 夕阳轨迹 等
本名: 谢平
籍贯: 江苏溧阳
位置: 上海
职业: C# & 打字
联系方式: 19999351(QQ)
 MSN.gif
有一天,我对你说你是猪,你说:我是猪才怪。于是我便开始叫你猪才怪。终于有一天你忍不住在众人面前大声宣布:我不是猪才怪! 7-25 15:25
<2006年10月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

与我联系

常用链接

留言簿

我管理的小组

我参与的团队

我的标签

随笔分类(79)

文章分类(19)

收藏夹(1)

关注的博客

搜索

积分与排名

最新评论