TIPS-保存Visual Studio偵錯時的Config修改結果

上回提過透過程式修改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;
        }
    }
}
歡迎推文分享:
Published 11 January 2010 08:41 PM 由 Jeffrey
Filed under: , ,
Views: 5,419



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<January 2010>
SunMonTueWedThuFriSat
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication