web-dev-qa-db-ja.com

C#(.NET)を使用してweb.configをプログラムで変更する

C#でプログラムでweb.configを変更/操作するにはどうすればよいですか?構成オブジェクトを使用できますか?はいの場合、どのようにしてweb.configを構成オブジェクトにロードできますか?接続文字列を変更する完全な例が欲しいです。変更後、web.configをハードディスクに書き戻す必要があります。

90
Kottan

ここにいくつかのコードがあります:

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

この記事 のその他の例を参照してください。 偽装 をご覧ください。

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

Web.configファイルはxmlファイルであるため、xmldocumentクラスを使用してweb.configを開くことができます。更新するXMLファイルからノードを取得し、XMLファイルを保存します。

ここに、web.configファイルをプログラムで更新する方法を詳細に説明するURLがあります。

http://patelshailesh.com/index.php/update-web-config-programmatically

注:web.configに変更を加えると、ASP.NETはその変更を検出し、アプリケーションをリロード(アプリケーションプールをリサイクル)し、その結果、セッション、アプリケーション、およびキャッシュに保持されているデータが失われます(セッション状態を想定) InProcであり、状態サーバーまたはデータベースを使用していません)。

5
shailesh

これは、AppSettingsの更新に使用する方法で、Webアプリケーションとデスクトップアプリケーションの両方で機能します。 connectionStringsを編集する必要がある場合は、System.Configuration.ConnectionStringSettings config = configFile.ConnectionStrings.ConnectionStrings["YourConnectionStringName"];からその値を取得し、config.ConnectionString = "your connection string";を使用して新しい値を設定できます。 Web.ConfigconnectionStringsセクションにコメントがある場合は削除されることに注意してください。

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