用C#寫了個windows服務程序,更改exe.config后,必須重新啟動服務才能讀取到新的配置值,如何使配置文件實時生效?
在代碼中讀取配置項值之前:
decimal.TryParse(System.Configuration.ConfigurationManager.AppSettings["StartHour"], out StartForbidHour);
先
System.Configuration.ConfigurationManager.RefreshSection("appSettings");
使得直接從磁盤讀取,獲得新值。
【轉載】C#讀寫配置文件
http://blog.csdn.net/lanman/article/details/5287717
讀配置很簡單,可以用ConfigurationManager.AppSettings[key] 來讀出,
可是寫配置文件時,如果寫成這樣
ConfigurationManager.AppSettings[key] = "111";
總是提示只讀,那么該怎么辦呢?
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Configuration;
- namespace BQKJ.Common
- {
- /// <summary>
- /// 對exe.Config文件中的appSettings段進行讀寫配置操作
- /// 注意:調試時,寫操作將寫在vhost.exe.config文件中
- /// </summary>
- publicclass ConfigAppSettings
- {
- /// <summary>
- /// 寫入值
- /// </summary>
- /// <param name="key"></param>
- /// <param name="value"></param>
- publicstaticvoid SetValue(string key, string value)
- {
- //增加的內容寫在appSettings段下 <add key="RegCode" value="0"/>
- System.Configuration.Configuration config = 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(ConfigurationSaveMode.Modified);
- ConfigurationManager.RefreshSection("appSettings");//重新加載新的配置文件
- }
- /// <summary>
- /// 讀取指定key的值
- /// </summary>
- /// <param name="key"></param>
- /// <returns></returns>
- publicstaticstring GetValue(string key)
- {
- System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
- if (config.AppSettings.Settings[key] == null)
- return"";
- else
- return config.AppSettings.Settings[key].Value;
- }
- }
- }
其實也很簡單,用這兩個封裝過的方法就可以了。
需要注意的是,在IDE調試時,寫入的配置文件其實是寫在了.vshost.exe.config文件中,所以你在.exe.config中是看不到的。只有直接運行exe文件時,才會正確寫入到.exe.config中。