43

有没有人在网络应用程序中得到这个工作?

无论我做什么,似乎我的 appSettings 部分(使用 appSettings file=".\Site\site.config" 从 web.config 重定向)都不会重新加载。

我注定要重新启动应用程序吗?我希望这种方法能引导我找到更高效的解决方案。

更新:

通过“重新加载”,我的意思是刷新 ConfigurationManager.AppSettings 而不必完全重新启动我的 ASP.NET 应用程序并且不必招致通常的启动延迟。

4

10 回答 10

55

确保将正确的区分大小写的值传递给 RefreshSection,即

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

当为您的 appSettings 使用外部配置文件时,这似乎是一个缺陷(可能是一个错误)。我已经尝试使用 configSource 属性,而 RefreshSection 根本不起作用,我假设在使用 file 属性时这是相同的。如果您将 appSettings 移回 web.config RefreshSection 将完美运行,否则恐怕您注定要失败。

于 2008-12-01T12:49:30.513 回答
5

由于某种原因ConfigurationManager.RefreshSection("appSettings")对我不起作用。将 Web.Config 重新加载到 Configuration 对象中似乎可以正常工作。以下代码假定 Web.Config 文件是执行 (bin) 文件夹下的一个目录。

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并设置restartOnExternalChanges="false".

然后,在阅读带有ConfigurationManager.GetSection("yourSection")设置的部分时,将自动刷新而无需重新启动应用程序

您可以将您的设置实现为强类型或 NameValueCollection。

于 2011-12-12T22:38:33.503 回答
0

是的。你被 iis 重新启动卡住了。

asp.net 4.0 和 iis 7.5 有一个功能,其中删除了初始启动。

于 2010-05-17T19:26:38.053 回答
0

我不确定这在网络应用程序中是否可行,但它适用于桌面应用程序。尝试使用 ConfigurationSettings 而不是 ConfigurationManager(它会因为使用过时的类而对你大喊大叫……),然后将所有数据读入一个类。当您希望刷新时,只需创建一个新实例并删除对旧实例的所有引用。我为什么这样做的理论(可能是错误的):当您在整个运行过程中不直接访问 app.config 文件时,应用程序会删除文件锁定。然后,可以在您不访问文件时进行编辑。

于 2010-06-15T22:05:36.117 回答
-1

App.Config 设置在应用程序启动时缓存在内存中。出于这个原因,我认为您将无法在不重新启动应用程序的情况下更改这些设置。一种非常简单的替代方法是创建一个单独的简单 XML 配置文件,并自己处理加载/缓存/重新加载。

于 2008-10-07T16:43:06.367 回答
-1

要写,这样称呼它:

昏暗配置为 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 回答
-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 回答