外部修改C#Winform程序配置文件后Winform程序通过ConfigurationManager.AppSettings.Get方法读取没有变化
如题。运行Winform程序,读取配置文件中AppSetting的某个节点的值,比如得到“0";然后用记事本打开并修改这个节点为”1“并保存,再次用Winform程序读取...
如题。运行Winform程序,读取配置文件中AppSetting的某个节点的值,比如得到“0" ;然后用记事本打开并修改这个节点为”1“并保存,再次用Winform程序读取这个节点,还是得到”0“,重启应用程序再读取就可以得到"1"。这是为什么?怎样才能实现修改配置文件后不重启程序得到修改后的值?
展开
2个回答
展开全部
这是因为你程序运行时,已经将配置文件中的信息加载到了内存中,之后每次读取时如果缓存中已经存在对应的值,则直接使用此值,否则才会从文件中读配置,这样做的好处是减少了系统和文件甚至与数据库的交互次数;
在web程序中配置文件更改后,应用程序会自动重启一次,于是配置会自动生效。但winform程序没有这个机制,于是Configuration.ConfigurationManager调用配置不会自动更新。
所以建议你手动实现调用配置的逻辑,代码如下:
public string ReadAppSetting(string key)
{
string xPath = "/configuration/appSettings//add[@key='"+key+"']";
XmlDocument doc = new XmlDocument();
string exeFileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
doc.Load(exeFileName + ".exe.config");
XmlNode node = doc.SelectSingleNode(xPath);
return node.Attributes["value"].Value.ToString();
}
这样做的话就不存在缓存的问题了,希望能对你有所帮助。
在web程序中配置文件更改后,应用程序会自动重启一次,于是配置会自动生效。但winform程序没有这个机制,于是Configuration.ConfigurationManager调用配置不会自动更新。
所以建议你手动实现调用配置的逻辑,代码如下:
public string ReadAppSetting(string key)
{
string xPath = "/configuration/appSettings//add[@key='"+key+"']";
XmlDocument doc = new XmlDocument();
string exeFileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
doc.Load(exeFileName + ".exe.config");
XmlNode node = doc.SelectSingleNode(xPath);
return node.Attributes["value"].Value.ToString();
}
这样做的话就不存在缓存的问题了,希望能对你有所帮助。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询