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


93

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


ASP.NET 2.0およびASP.NET 3.5でweb.configプログラムで操作する方法については、彼のブログ投稿を確認してください。または、質問の回答が含まれているこの質問を確認してください。.netで接続文字列の構成をプログラムで設定するにはどうすればよいですか?
shoban

回答:


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 2016年

@SharpCoder、パスは仮想パスであるため、最初にリモートサーバーからローカルアプリケーションにweb.configをコピーする必要があります(独自のweb.configを上書きしないように一時フォルダー内に)、それを編集して保存し、次にコピーして戻す必要があります。リモートサーバーへ。または、より良い、より複雑なソリューションは、ジョブを実行するAPI(web.configを変更)を作成し、それをリモートサーバーにデプロイして、ローカルサーバーから使用することです。
Guilherme Branco Stracini、2016年

@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

5

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であり、状態サーバーまたはデータベースを使用していません)。


私はそれが技術的に可能であることを知っています。Microsoftによって認可された/承認された方法は、より長く持続し、web.configの破壊の影響を受けにくいと思います。これらのファイルはすべて「手動」で更新しましたが、実稼働Webサーバーでは危険だと思います。ちょうど私の2c。
Anthony Horne 2018

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.