有没有人在网络应用程序中使用它?
无论我做什么,似乎我的appSettings部分(使用appSettings file =“。\ Site \ site.config”从web.config重定向)都没有重新加载。
我注定要重新启动应用程序吗?我希望这种方法能够让我找到更高效的解决方案。
更新
通过“重新加载”,我的意思是刷新ConfigurationManager.AppSettings,而不必完全重启我的ASP.NET应用程序,并且不得不承担通常的启动延迟。
答案 0 :(得分:47)
确保将正确的case sensitive值传递给RefreshSection,即
ConfigurationManager.RefreshSection("appSettings");
答案 1 :(得分:13)
当您为appSettings使用外部配置文件时,这似乎是一个缺陷(可能是一个错误)。我已尝试使用configSource属性,而RefreshSection根本无法工作,我假设使用文件属性时这是相同的。 如果你将appSettings移回web.config中,RefreshSection将完美运行,否则我担心你注定失败了。
答案 2 :(得分:4)
出于某种原因,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;
答案 3 :(得分:3)
作为替代方案,您可以编写自己的ConfigSection
并设置restartOnExternalChanges="false"
。
然后,当使用ConfigurationManager.GetSection("yourSection")
阅读该部分时,设置将自动刷新,而无需重新启动应用。
您可以实现强类型设置或NameValueCollection。
答案 4 :(得分:1)
.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,而无需重新启动应用程序。
答案 5 :(得分:0)
是。你坚持使用iis重启。
asp.net 4.0和iis 7.5有一个功能,即删除初始启动。
答案 6 :(得分:0)
我不确定这是否可以在网络应用中使用,但它适用于桌面应用。尝试使用ConfigurationSettings而不是ConfigurationManager(它会因使用过时的类而对你大喊大叫......),然后将所有数据读入类中。当您希望刷新时,只需创建一个新实例并删除对旧实例的所有引用。我的理论为什么这样做(可能是错误的):当你在整个运行时没有直接访问app.config文件时,应用程序就会删除文件锁。然后,当您不访问该文件时,可以进行编辑。
答案 7 :(得分:-1)
应用程序启动时,App.Config设置将缓存在内存中。因此,我认为如果不重新启动应用程序,您将无法更改这些设置。一个非常直接的替代方案是创建一个单独的,简单的XML配置文件,并自己处理加载/缓存/重新加载。
答案 8 :(得分:-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
答案 9 :(得分:-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