问题描述
很基础的问题,但我比较纳闷,以前也都是这么写的,没有出现问题啊,在IDE中运行Release版的程序写入配置文件,关闭程序后,配置文件又都恢复了App.config中的初始内容,应该是重新复制了App.config中的内容到其中,但也不是每次都会这样,我知道IDE调试时,写入的配置文件其实是写在了.vshost.exe.config文件中的。直接运行exe文件时,才会正确写入到.exe.config中,直接运行的我试的不多,不知道有没有这种情况出现。在网上搜到的问题大都是重新运行程序后才能读到最新的配置文件,是没有ConfigurationManager.RefreshSection("appSettings");//重新加载新的配置文件和我的问题不一样啊。我是不是有什么设置不对,以下是代码:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Configuration;//要添加对System.Configuration程序集的引用,在引用或者Bin文件夹上按右键选择添加引用。namespaceCtrlTest{///<summary>///对exe.Config文件中的appSettings段进行读写配置操作///注意:调试时,写操作将写在vhost.exe.config文件中///</summary>classMyConfiguration{staticobjectconfigVar=newobject();publicstaticboolSaveConfig(stringkey,stringvalue){try{lock(configVar){Configurationconfig=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);if(config.AppSettings.Settings[key]==null){config.AppSettings.Settings.Add(key,value);}else{config.AppSettings.Settings[key].Value=value;}config.Save();//config.Save(ConfigurationSaveMode.Modified);ConfigurationManager.RefreshSection("appSettings");//重新加载新的配置文件}returntrue;}catch{returnfalse;}}///<summary>///在*.exe.config文件中appSettings配置节增加一对键、值对///</summary>///<paramname="newKey"></param>///<paramname="newValue"></param>publicstaticvoidUpdateAppConfig(stringnewKey,stringnewValue){boolisModified=false;foreach(stringkeyinConfigurationManager.AppSettings){if(key==newKey){isModified=true;}}lock(configVar){//OpenApp.ConfigofexecutableConfigurationconfig=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);//Youneedtoremovetheoldsettingsobjectbeforeyoucanreplaceitif(isModified){config.AppSettings.Settings.Remove(newKey);}//AddanApplicationSetting.config.AppSettings.Settings.Add(newKey,newValue);//SavethechangesinApp.configfile.config.Save(ConfigurationSaveMode.Modified);//Forceareloadofachangedsection.ConfigurationManager.RefreshSection("appSettings");}}publicstaticstringGetConfig(stringkey){lock(configVar){Configurationconfig=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);if(config.AppSettings.Settings[key]==null)return"";returnconfig.AppSettings.Settings[key].Value;//returnConfigurationManager.AppSettings[key];}}}}
AppConfig中的内容:<?xmlversion="1.0"encoding="utf-8"?><configuration><appSettings><addkey="Lexium23dPort"value="COM2"></add><addkey="MagPort"value="COM3"></add><addkey="FanPort"value="COM4"></add><addkey="MaxonHorPort"value="COM5"></add><addkey="MaxonVerPort"value="COM6"></add><addkey="JoyStickLexium23dPort"value="COM8"></add><addkey="JoyStickMaxonPort"value="COM7"></add><addkey="Lexium23dXNorLoad"value="70"></add><addkey="Lexium23dYNorLoad"value="50"></add><addkey="Lexium23dZNorLoad"value="120"></add><addkey="MaxonVerNorCurrent"value="520"></add><addkey="MaxonHorNorCurrent"value="300"></add><addkey="MaxonVelDValue"value="15"></add><addkey="Lexium23dXLength"value="15"></add><addkey="Lexium23dYLength"value="15"></add><addkey="Lexium23dZLength"value="15"></add><addkey="MaxonType"value="0"></add><addkey="MaxonVerNewNorCurrent"value="300"></add><addkey="MaxonHorNewNorCurrent"value="300"></add><addkey="Lexium23dXCoordinate"value="15"></add><addkey="Lexium23dYCoordinate"value="15"></add><addkey="Lexium23dZCoordinate"value="15"></add></appSettings></configuration>
解决方案
解决方案二:
用vc读写ini文件时,读完要释放buff。c#的没做过,不知道是不是这个原因。
解决方案三:
没有人可以回复一下吗,除楼上。
解决方案四:
试试把ConfigurationSaveMode函数中的config.Save(ConfigurationSaveMode.Modified);修改为config.Save();或者config.Save(ConfigurationSaveMode.Full);
解决方案五:
引用3楼songbing774933的回复:
试试把ConfigurationSaveMode函数中的config.Save(ConfigurationSaveMode.Modified);修改为config.Save();或者config.Save(ConfigurationSaveMode.Full);
是UpdateAppConfig函数
解决方案六:
会不会是权限问题
解决方案七:
引用5楼pengwu666的回复:
会不会是权限问题
不是选了ConfigurationUserLevel.None,所有用户都可以吗
解决方案八:
引用4楼songbing774933的回复:
Quote: 引用3楼songbing774933的回复:
试试把ConfigurationSaveMode函数中的config.Save(ConfigurationSaveMode.Modified);修改为config.Save();或者config.Save(ConfigurationSaveMode.Full);是UpdateAppConfig函数
其实UpdateAppConfig函数都没用到,用的都是SaveConfig()函数,SaveConfig()函数中本来用的是config.Save(ConfigurationSaveMode.Modified),后来改为config.Save();但是这种问题还是会出现
解决方案九:
放心吧,直接运行时不会有这种情况。在IDE环境中有时会有发生,是因为你对项目进行过改动,所以会用App.config覆盖输出目录中的config。
解决方案十:
同意8楼,之前碰到过,是IDE调试环境的问题。脱离调试环境,独立运行再试一下
解决方案十一:
引用8楼qbilbo的回复:
放心吧,直接运行时不会有这种情况。在IDE环境中有时会有发生,是因为你对项目进行过改动,所以会用App.config覆盖输出目录中的config。
对项目进行过改动,是对什么进行了改动?是指在运行调试过后,又对项目进行了改动吗?我本来认为是这样的,但是我其实避免了运行调试后再去改它。
解决方案十二:
持续关注本问题