使用C#(.NET)以编程方式更改web.config


93

如何web.config使用C#以编程方式修改/操作?我可以使用web.config配置对象吗?如果可以,如何将其加载到配置对象中?我想举一个完整的示例来更改连接字符串。修改后,web.config应将其写回硬盘。


查看他的博客文章,该文章有关如何以编程方式在ASP.NET 2.0和ASP.NET 3.5中操作web.config。或者,选择此问题,该问题具有您的问题的答案。如何在.net中以编程方式设置连接字符串配置?
Shoban

Answers:


115

这是一些代码:

var configuration = WebConfigurationManager.OpenWebConfiguration("~");
var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
section.ConnectionStrings["MyConnectionString"].ConnectionString = "Data Source=...";
configuration.Save();

请参阅本文中的更多示例,您可能需要看一下模拟


web.config文件中的连接字符串的名称是什么?
Alex LE

文章链接已损坏
Vitall 2014年

@AlexLE:将web.config放置在其他位置时,我们如何指定文件位置。可能是共享路径上的远程服务器?
SharpCoder

@SharpCoder,该路径是虚拟路径,因此您需要先将web.config从远程服务器复制到本地应用程序(在temp文件夹中,以不覆盖您自己的web.config),对其进行编辑,保存然后再复制回来到远程服务器。或更好,更复杂的解决方案是:创建一个确实起作用的API(更改de web.config),将其部署到远程服务器,然后从本地服务器使用它。
Guilherme Branco Stracini '16

@Skami必须将connectionStrings名称设置为“ MyConnectionString”,这意味着section.ConnectionStrings [“ MyConnectionString”]的值应与名称匹配。
Liakat

12
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;
//section.SectionInformation.UnprotectSection();
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();

如何从部分变量获取用户ID?
Niks 2012年

5

由于web.config文件是xml文件,因此可以使用xmldocument类打开web.config。从您要更新的xml文件中获取节点,然后保存xml文件。

这是URL,它更详细地说明了如何以编程方式更新web.config文件。

http://patelshailesh.com/index.php/update-web-config-以编程方式

注意:如果对web.config进行任何更改,ASP.NET会检测到更改,它将重新加载您的应用程序(回收应用程序池),其结果是保存在Session,Application和Cache中的数据将丢失(假定会话状态)是InProc且未使用状态服务器或数据库)。


我知道这在技术上是可行的,我认为Microsoft认可/批准的方法可能会更长久,并且不会破坏web.config。我们都已经“手工”更新了这些文件,但是我认为生产Web服务器存在风险。只是我的2c。
安东尼·霍恩

2

这是我用来更新AppSettings的方法,适用于Web和桌面应用程序。如果需要编辑connectionStrings,则可以从中获取该值System.Configuration.ConnectionStringSettings config = configFile.ConnectionStrings.ConnectionStrings["YourConnectionStringName"];,然后使用设置一个新值config.ConnectionString = "your connection string";。请注意,如果您在本connectionStrings节中有任何评论,Web.Config这些评论将被删除。

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);
}

这段代码很好,我赞成它,但是如果在另一个文件中定义了appSettings,则该代码将无效,例如:<appSettings file =“ C:\ Client \ customSettings.config”> </ appSettings>
Ben Junior
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.