TIPS-保存Visual Studio偵錯時的Config修改結果
0 |
上回提過透過程式修改config檔設定值,再分享一個私房小技巧。
當我們使用Visual Studio對程式偵錯時,VS在編譯(Build)時會一併將App.Config的內容覆寫到/debug/bin/yourAppName.exe.config及/debug/bin/'yourAppName.vshost.exe.Config。程式執行時,對config檔的修改其實是寫到yourAppName.vshost.exe.Config裡。當程式執行結束,yourAppName.vshost.exe.Config的內容會再被App.Config所覆蓋。換句話說,VS偵錯程式時對Config所做的修改會在程式結束後化為烏有,那還測個屁?? (這讓我一直聯想到月亮上那棵吳剛砍了幾千年還砍不斷的桂樹)
有些人建議改用自訂的config來保存設定值,但如此就無法借用現成方法更新設定,讓人有些不甘心。另一種做法是將bin目錄下的檔案Copy到其他目錄下再執行,但這又衍生出"部署"需求,破壞"改完程式按一下就馬上Debug"的流暢性。
於是我土法鍊鋼加入以下程式: 在程式結束時,先偵測是否為偵錯模式? 若是,則將Config檔案內容回寫App.Config,如此就不用再擔心程式修改結果被覆寫囉!
using System;
using System.Windows.Forms;
using System.Configuration;
using System.IO;
namespace WF
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_FormClosed(object sender,
FormClosedEventArgs e)
{
System.Configuration.Configuration conf =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);
conf.AppSettings.Settings["LastTime"].Value =
DateTime.Now.ToString("HH:mm:ss");
conf.Save(ConfigurationSaveMode.Modified);
try
{
//Debug Mode時回寫app.config
if (System.Diagnostics.Debugger.IsAttached)
File.Copy(conf.FilePath,
"..\\..\\app.config", true);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void Form1_Load(object sender, EventArgs e)
{
System.Configuration.Configuration conf =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);
this.Text = "LastTime => " +
conf.AppSettings.Settings["LastTime"].Value;
}
}
}
Comments
Be the first to post a comment