2013-04-26 129 views
1

我想使用Settings.settings來定義/堅持一些變量。爲了簡便起見,我已經建立了一個測試文件來證明我看到的行爲:查看Properties.Settings.Default變量

首先,我定義Settings.settings設置:

From the Settings.settings window (variableName

然後我有以下代碼以測試改變VARIABLENAME:

public Form1() 
    { 
     InitializeComponent(); 

     string newString = Properties.Settings.Default.variableName; 
     Properties.Settings.Default.variableName = "This is a new string"; 
     Properties.Settings.Default.Save(); 
    } 

運行上面在調試器的第一次,我抓取當前值VARIABLENAME從Properties.Settings(I在Settings.settings窗口最初設置的值)。正如所料,newString被設置爲「這是一個字符串」。好.....

在執行接下來的兩行之後,調試器顯示variableName改爲「這是一個新字符串」。好...

然後我再次通過調試器運行應用程序。我點擊了字符串newString行,並且在執行之前,newString未定義(當然)。好....

Undefined...not executed yet

當我執行...

string newString = Properties.Settings.Default.variableName; 

...和代碼的後續執行,VARIABLENAME的實際值被定義爲「此是一個新的字符串「(好...如預期)。

然後我回到Settings.settings窗口。 variableName沒有改變 - 它仍然是「這是一個字符串」。我甚至關閉了VSE 2012並重新開放了該項目。 Settings.settings從不改變。

存儲新值在哪裏?我檢查了所有.config文件([appname] .exe.config,[appname] .vshost.exe.config,app.config和Settings.settings文件)和新值「這是一個新的字符串「不在任何地方被發現。

總之,我從代碼中得到了我期望的結果,但似乎無法在設計時查看結果,除了在調試器中檢查var的值之外。這似乎不僅僅是我特有的,而且是不可能的。

我在想什麼/我在哪裏找?我完全期望在Settings.settings窗口中更改variableName的值,但它永遠不會。我到處尋找StackOverflow/Google,似乎無法找到答案。

在此先感謝....

回答

2

通過Settings.settings配置的原始值與可執行文件的程序集一起存儲在.config文件中。除非您直接通過Visual Studio修改設置文件,否則這絕不會改變;它本質上是一個只讀文件。

用戶的自定義設置存儲在用戶配置文件內的單獨配置文件中。這個文件的位置取決於你的程序集的元數據。例如,在Windows 7/Vista中的位置可能是這樣的:

C:\Users\<user name>\AppData\Local\<company name>\<assembly name>\ 
    AssemblyName\<version>\user.config 

如果你還沒有在你的程序集的元數據定製的公司名稱則可能默認爲微軟。另請注意,AppData是一個隱藏文件夾,根據您的視圖設置,它可能在Windows資源管理器中不可見。

+0

感謝您抽出時間。 Settings.settings'var store'是一種很好的方法(IMO),可以避免與我的應用程序的ConfigurationManager混淆,該應用程序只在需要持久性的用戶範圍內有一個var。現在我可以在上面的示例中找到正在改變的文件(我將包含路徑,但我只有280個字符留給我的評論......哈哈),我更加自信地使用Settings.settings表。我知道這是不合理的偏執狂,但我沒有得到強迫症標籤,因爲我是一個合理的人。最好的祝福... – LovinItAll 2013-04-27 14:43:28

0

我不知道我是否理解您的問題。該可變內容保持不變。而已。爲什麼你會設置一個持久變量來稍後改變它?

+0

你問爲什麼有人會想要在settings.settings中創建和設置一個變量,然後在運行時定期更改該變量?發生這種情況的情況很多,特別是在用戶範圍內。例如,而不是使用ConfigurationManager類,尤其是如果用戶只有極少數配置參數發生更改時,我提供的示例非常方便(例如,爲保存數據設置用戶範圍的文件路徑)。如果不明確,我可以更具體。 – LovinItAll 2013-04-26 21:12:38