【发布时间】:2011-01-16 15:33:45
【问题描述】:
如何使用 C# 以编程方式修改/操作web.config?我可以使用配置对象吗?如果可以,如何将web.config 加载到配置对象中?我想要一个更改连接字符串的完整示例。修改后web.config应该写回硬盘。
【问题讨论】:
标签: c# web-config
如何使用 C# 以编程方式修改/操作web.config?我可以使用配置对象吗?如果可以,如何将web.config 加载到配置对象中?我想要一个更改连接字符串的完整示例。修改后web.config应该写回硬盘。
【问题讨论】:
标签: c# web-config
这是一些代码:
var configuration = WebConfigurationManager.OpenWebConfiguration("~");
var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
section.ConnectionStrings["MyConnectionString"].ConnectionString = "Data Source=...";
configuration.Save();
在this article 中查看更多示例,您可能需要查看impersonation。
【讨论】:
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;
//section.SectionInformation.UnprotectSection();
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();
【讨论】:
由于 web.config 文件是 xml 文件,您可以使用 xmldocument 类打开 web.config。从要更新的 xml 文件中获取节点,然后保存 xml 文件。
这里是详细说明如何以编程方式更新 web.config 文件的 URL。
http://patelshailesh.com/index.php/update-web-config-programmatically
注意:如果您对 web.config 进行任何更改,ASP.NET 会检测到更改并重新加载您的应用程序(回收应用程序池),其效果是保存在 Session、Application 和 Cache 中的数据将丢失(假设会话状态是 InProc 并且不使用状态服务器或数据库)。
【讨论】:
这是我用来更新 AppSettings 的一种方法,适用于 Web 和桌面应用程序。如果您需要编辑连接字符串,您可以从System.Configuration.ConnectionStringSettings config = configFile.ConnectionStrings.ConnectionStrings["YourConnectionStringName"]; 获取该值,然后使用config.ConnectionString = "your connection string"; 设置一个新值。请注意,如果您在 Web.Config 的 connectionStrings 部分中有任何 cmets,这些将被删除。
private void UpdateAppSettings(string key, string value)
{
System.Configuration.Configuration configFile = null;
if (System.Web.HttpContext.Current != null)
{
configFile =
System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
}
else
{
configFile =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
}
var settings = configFile.AppSettings.Settings;
if (settings[key] == null)
{
settings.Add(key, value);
}
else
{
settings[key].Value = value;
}
configFile.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
}
【讨论】: