虽然web.config文件是一个XML文件,但是由于权限的原因它在部署中不能像操作普通XML文件那样进行修改,在.NET 中提供了一个类用于对Web.config进行修改。
下面是针对web.config修改通用类的代码。
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Web.Configuration; /// <summary> /// ConfigurationOperator 的摘要说明 /// </summary> public class ConfigurationOperator:IDisposable { private Configuration config; public ConfigurationOperator():this(HttpContext.Current.Request.ApplicationPath) { // // TODO: 在此处添加构造函数逻辑 // } public ConfigurationOperator(string path) { config = WebConfigurationManager.OpenWebConfiguration(path); } /// <summary> /// 设置应用程序配置节点,如果已经存在此节点,则会修改该节点的值;否则添加此节点 /// </summary> /// <param name="key">节点名称</param> /// <param name="value">节点值</param> public void SetAppSetting(string key, string value) { AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("appSettings"); if (appSetting.Settings[key]==null)//如果不存在此节点,则添加 { appSetting.Settings.Add(key, value); } else//如果存在,则修改 { appSetting.Settings[key].Value = value; } } /// <summary> /// 设置数据库连接字符串节点,如果不存在此节点,则会添加此节点及对应的值;存在则修改 /// </summary> /// <param name="key"></param> /// <param name="connectionString"></param> public void SetConnectionString(string key, string connectionString) { ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings"); if (connectionSetting.ConnectionStrings[key]==null)//如果不存在此节点则添加 { ConnectionStringSettings connectionStringSettings = new ConnectionStringSettings(key,connectionString); connectionSetting.ConnectionStrings.Add(connectionStringSettings); } else { connectionSetting.ConnectionStrings[key].ConnectionString = connectionString; } } /// <summary> /// 保存所做的操作 /// </summary> public void Save() { config.Save(); config = null; } #region IDisposable 成员 public void Dispose() { if (config!=null) { config.Save(); } } #endregion }
把上面的代码放到App_Code文件夹下,我们在项目中就可以直接使用了。
我们通过一个例子来演示如何使用这个类。
前台代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ConfigModifyDemo.aspx.cs" Inherits="ConfigModifyDemo" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>在部署后修改Web.config的例子</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table style="width: 489px">
<tr>
<td style="width: 155px">
类型</td>
<td style="width: 154px">
名称</td>
<td>
值</td>
</tr>
<tr>
<td style="width: 155px">
程序配置</td>
<td style="width: 154px">
<asp:TextBox ID="txtKey" runat="server"></asp:TextBox><asp:RequiredFieldValidator
ID="RequiredFieldValidator1" runat="server" ErrorMessage="*" Display="Dynamic" ControlToValidate="txtKey"></asp:RequiredFieldValidator></td>
<td>
<asp:TextBox ID="txtAppSetting" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td style="width: 155px">
数据库连接</td>
<td style="width: 154px">
<asp:TextBox ID="txtConnectionName" runat="server"></asp:TextBox><asp:RequiredFieldValidator
ID="RequiredFieldValidator2" runat="server" ErrorMessage="*" ControlToValidate="txtConnectionName" Display="Dynamic"></asp:RequiredFieldValidator></td>
<td>
<asp:TextBox ID="txtConnectionString" runat="server"></asp:TextBox></td>
</tr>
</table>
</div>
<asp:Button ID="btnModify" runat="server" Text="修改" OnClick="btnModify_Click" />
</form>
</body>
</html>
编写后台代码有时需要增加对配置文件读写操作类所在DLL的引用。
后台代码:
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Web.Configuration;//注意添加此命名空间 public partial class ConfigModifyDemo : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnModify_Click(object sender, EventArgs e) { string appSetting = txtAppSetting.Text;//appSetting子节点值 string connectionString = txtConnectionString.Text;//连接字符串 string key = txtKey.Text;//appSetting子节点key string connectionName = txtConnectionName.Text;//连接name ConfigurationOperator op = new ConfigurationOperator(); op.SetAppSetting(key,appSetting); op.SetConnectionString(connectionName, connectionString); op.Save(); } }
在表单中依次填入下列信息:
county china
conn Data Source=(local);...
然后去看配置文件有什么变化。