43

これを Web アプリケーションで動作させた人はいますか?

何をしても、appSettings セクション (appSettings file=".\Site\site.config" を使用して web.config からリダイレクト) がリロードされないようです。

アプリケーションを再起動しなければならない運命にあるのでしょうか? この方法により、よりパフォーマンスの高いソリューションにつながることを期待していました。

アップデート:

「再読み込み」とは、ASP.NET アプリケーションを完全に再起動したり、通常の起動待ち時間を発生させたりすることなく、ConfigurationManager.AppSettings を更新することを意味します。

4

10 に答える 10

55

大文字と小文字を区別する正しい値をRefreshSectionに渡していることを確認してください。

ConfigurationManager.RefreshSection("appSettings");
于 2009-10-20T02:14:32.963 に答える
16

これは、appSettings に外部構成ファイルを使用する場合の欠陥 (おそらくバグ) のようです。configSource 属性を使用して試してみましたが、 RefreshSection はまったく機能しません。これは、ファイル属性を使用する場合と同じであると想定しています。appSettings を web.config 内に戻すと、RefreshSection は完全に機能しますが、それ以外の場合は運命にあると思います。

于 2008-12-01T12:49:30.513 に答える
5

何らかの理由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;
于 2013-03-05T08:24:28.917 に答える
4

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 が更新されます。

于 2017-01-06T12:17:32.363 に答える
3

ConfigSection別の方法として、独自に記述して set を設定することもできますrestartOnExternalChanges="false"

ConfigurationManager.GetSection("yourSection")次に、設定を含むセクションを読み取ると、アプリケーションを再起動せずに自動更新されます

また、設定を厳密に型指定するか、NameValueCollection として実装できます。

于 2011-12-12T22:38:33.503 に答える
0

これが Web アプリで可能かどうかはわかりませんが、デスクトップ アプリでは機能します。ConfigurationManagerではなくConfigurationSettingsを使用してみてください(古いクラスを使用すると怒鳴られます...)、すべてのデータをクラスに読み込みます。更新する場合は、新しいインスタンスを作成し、古いインスタンスへのすべての参照を削除するだけです。これが機能する理由についての私の理論 (間違っている可能性があります): 実行中に app.config ファイルに直接アクセスしないと、アプリケーションによってファイル ロックが解除されます。その後、ファイルにアクセスしていないときに編集を行うことができます。

于 2010-06-15T22:05:36.117 に答える
0

はい。あなたはiisの再起動で立ち往生しています。

初期スタートアップが削除される asp.net 4.0 および iis 7.5 の機能があります。

于 2010-05-17T19:26:38.053 に答える
-1

書くには、次のように呼び出します。

Dim config As System.Configuration.Configuration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~")

AddOrUpdateAppSetting(config, "YourSettingKey", "YourValueForTheKey") を返します

キャッシュ内の値ではなく、ファイル内の値を読み取って確実に取得するには、次のように読み取ります。

Dim config As System.Configuration.Configuration = WebConfigurationManager.OpenWebConfiguration("~")
  Return config.AppSettings.Settings("TheKeyYouWantTheValue").Value

完全な例:

Protected Shared Function AddOrUpdateAppSetting( _
       ByVal Config As System.Configuration.Configuration _
     , ByVal TheKey As String _
     , ByVal TheValue As String _
     ) As Boolean</p>

    Dim retval As Boolean = True

    Dim Itm As System.Configuration.KeyValueConfigurationElement = _
        Config.AppSettings.Settings.Item(TheKey)
    If Itm Is Nothing Then
        If Config.AppSettings.Settings.IsReadOnly Then
        retval = False
        Else
        Config.AppSettings.Settings.Add(TheKey, TheValue)
        End If


    Else
        ' config.AppSettings.Settings(thekey).Value = thevalue
        If Itm.IsReadOnly Then
            retval = False
        Else
            Itm.Value = TheValue
        End If


    End If
    If retval Then
     Try
        Config.Save(ConfigurationSaveMode.Modified)

     Catch ex As Exception
        retval = False
     End Try

    End If

    Return retval

End Function
于 2009-01-30T09:39:58.057 に答える
-1

App.Config 設定は、アプリケーションの起動時にメモリにキャッシュされます。このため、アプリケーションを再起動しないとこれらの設定を変更できないと思います。別の簡単な XML 構成ファイルを作成し、そのファイルの読み込み/キャッシュ/再読み込みを自分で処理するという方法は、非常に簡単な方法です。

于 2008-10-07T16:43:06.367 に答える
-2

AppSettings を独自の外部ファイルに保存しようとしましたか?

app.config/web.config から:

<appSettings configSource="appSettings.config"></appSettings>

appSettings.config:

<?xml version="1.0"?>
<appSettings>
  <add key="SomeKey" value="SomeValue" />
</appSettings>

appSettings.config に加えられた変更は、すぐに反映されるはずです。詳細: http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.configsource.aspx

于 2010-04-07T19:27:51.260 に答える