誰かがこれをWebアプリケーションで機能させていますか?
私が何をしても、私のappSettingsセクション(appSettings file = "。\ Site\site.config"を使用してweb.configからリダイレクト)がリロードされないようです。
アプリケーションを再起動するだけで済むのではないでしょうか。この方法がより高性能なソリューションにつながることを期待していました。
更新:
「リロード」とは、ASP.NETアプリケーションを完全に再起動する必要がなく、通常の起動待ち時間が発生することなく、ConfigurationManager.AppSettingsを更新することを意味します。
正しい 大文字と小文字を区別 の値をRefreshSectionに渡していることを確認してください。
ConfigurationManager.RefreshSection("appSettings");
AppSettingsに外部設定ファイルを使用する場合、これは欠陥(おそらくバグ)のようです。 configSource属性を使用して試してみましたが、RefreshSectionはまったく機能しません。これは、file属性を使用する場合も同じであると想定しています。 appSettingsをweb.config内に戻した場合、RefreshSectionは完全に機能しますが、それ以外の場合は運命にあると思います。
何らかの理由でConfigurationManager.RefreshSection("appSettings")
が機能しませんでした。 Web.ConfigをConfigurationオブジェクトに再読み込みすると、正常に動作するようです。次のコードは、Web.Configファイルが実行中の(bin)フォルダーの下の1つのディレクトリであることを前提としています。
ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
Uri uriAssemblyFolder = new Uri(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase));
string appPath = uriAssemblyFolder.LocalPath;
configMap.ExeConfigFilename = appPath + @"\..\" + "Web.config";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
そして、次のように使用されます:
string webConfigVariable = config.AppSettings.Settings["webConfigVariable"].Value;
別の方法として、独自のConfigSection
を記述して_restartOnExternalChanges="false"
_を設定することもできます。
次に、ConfigurationManager.GetSection("yourSection")
でセクションを読み取ると、設定はアプリケーションを再起動せずに自動更新になります。
また、厳密に型指定された設定またはNameValueCollectionとして設定を実装できます。
appSettingsが外部の場合、.RefreshSection()は機能しません。
ただし、以下を使用して値を変更できます。
ConfigurationManager.AppSettings.Set(key, value)
これはファイルの設定を変更せず、メモリにロードされた値のみを変更します。
したがって、RefreshSectionを使用する代わりに、次のことを行いました。
string configFile="path to your config file";
XmlDocument xml = new XmlDocument();
xml.Load(configFile);
foreach (XmlNode node in xml.SelectNodes("/appSettings/add"))
{
string key = node.Attributes["key"].Value;
string value= node.Attributes["value"].Value;
ConfigurationManager.AppSettings.Set(key, value);
}
その後のAppSettings.Getの呼び出しには、更新された値が含まれます。
その後、アプリケーションを再起動する必要なく、appSettingsが更新されます。
はい。 iisの再起動で立ち往生しています。
Asp.net 4.0およびiis 7.5には、最初の起動が削除された機能があります。
これがWebアプリで可能かどうかはわかりませんが、デスクトップアプリでは機能します。 ConfigurationManagerではなくConfigurationSettingsを使用してみてください(古いクラスを使用すると怒鳴ります...)、すべてのデータをクラスに読み込みます。更新したい場合は、新しいインスタンスを作成し、古いインスタンスへのすべての参照を削除します。これが機能する理由についての私の理論(間違っている可能性があります):実行中ずっとapp.configファイルに直接アクセスしないと、アプリケーションによってファイルロックが解除されます。その後、ファイルにアクセスしていないときに編集を行うことができます。