それは物理的なファイルからあなたが値を求めるたびに読み込まれませんので、それは、プロパティの最初のアクセスで、キャッシュされます。このため、最新の値を取得するためにはWindowsアプリケーション(またはRefresh)を再起動する必要があり、web.configを編集するとASP.Netアプリケーションが自動的に再起動するのはなぜですか。 ASP.Netがなぜ再起動するように配線されているのかは、回答How to prevent an ASP.NET application restarting when the web.config is modifiedの参考文献で説明されています。
我々はILSpyを使用し、System.Configurationの内部を見てこれを確認することができます
public static NameValueCollection AppSettings
{
get
{
object section = ConfigurationManager.GetSection("appSettings");
if (section == null || !(section is NameValueCollection))
{
throw new ConfigurationErrorsException(SR.GetString("Config_appsettings_declaration_invalid"));
}
return (NameValueCollection)section;
}
}
最初はそれがセクションごとに時間を取得するように、これは確かに見えません。 GetSectionを見て:
public static object GetSection(string sectionName)
{
if (string.IsNullOrEmpty(sectionName))
{
return null;
}
ConfigurationManager.PrepareConfigSystem();
return ConfigurationManager.s_configSystem.GetSection(sectionName);
}
ここで重要なラインがPrepareConfigSystem()
方法です。これは、構成管理によって保持IInternalConfigSystem
フィールドのインスタンスを初期化 - 具象型はConfigurationクラスのインスタンスがインスタンス化され、この負荷の一部としてClientConfigurationSystem
あります。このクラスは実質的にconfigファイルのオブジェクト表現であり、静的フィールドのClientConfigurationSystemのClientConfigurationHostプロパティによって保持されているように見えるため、キャッシュされます。
あなたが行うことによって、経験的に、これをテストすることができ(WindowsフォームやWPFアプリで)次
- がに変更を加えます
- アクセスアップのapp.config
- の値を、あなたのアプリケーションの起動新しい値が新しい値かどうかを確認することが、本
- コール
ConfigurationManager.RefreshSection("appSettings")
- チェックされているかどうかをapp.configを
- チェック存在する。実際に
私はちょうど
/// <summary>Refreshes the named section so the next time that it is retrieved it will be re-read from disk.</summary>
/// <param name="sectionName">The configuration section name or the configuration path and section name of the section to refresh.</param>
「いつもではない」とはどういう意味ですか?それは設計上、私はIISがアプリケーションを再起動し、設定を再ロードすることを理解しています。 –