2010-02-04 28 views
8

我有一個Windows應用程序,它使用一個程序集在默認的應用程序設置中存儲一些配置設置。爲什麼沒有加載持久的用戶設置?

的設置可以在運行時更改,因此被持久:

Properties.Settings.Default.SelectedCOMPort = options.SelectedCOMPort; 
Properties.Settings.Default.Save(); 

的設置正確保存和我通過查看保存在用戶的應用程序目錄例如在user.config文件證實了這一點

C:\Documents and Settings\e399536\Local Settings\Application Data\MyCompany\MyTool 

但是,當工具關閉然後再次啓動時,所有設置都將使用其默認值加載。

應用程序運行後檢查user.config文件確認設置​​仍然保存。

的設置從而加載:

options.SelectedCOMPort = Properties.Settings.Default.SelectedCOMPort; 

爲什麼正在使用的默認設置,而不是保存的呢?

我錯過了什麼?

@ Tenaciouslmpy 設置在程序集的構造函數中加載,該程序本身在主程序集的表單加載事件中加載。

@ Austin 這是一個獨立的應用程序,我在Visual Studio中進行調試。

+0

你可以發佈你加載字符串設置的代碼嗎? – 2010-02-04 17:39:53

+0

你什麼時候加載設置?表單生命週期中的什麼事件? – keyboardP 2010-02-04 17:49:36

+0

這是來自獨立安裝還是正在從IDE運行? – 2010-02-04 17:51:17

回答

10

如果您正在重新編譯應用程序之間的運行,請注意,它會認爲應用程序的新版本,並會而不是自動加載每個用戶的設置。在這種情況下,您需要調用Settings.Default.Upgrade。

只有在需要時才執行此操作的一種方法是將NeedsUpgrade設置(值True)添加到應用程序的默認每個用戶設置。在應用程序啓動時,檢查NeedsUpgrade是否爲真。如果是這樣,請致電升級,將NeedsUpgrade設置爲False,然後保存設置。下次應用版本更改時,NeedsUpgrade將重置爲True,您將自動調用Upgrade以再次引入任何現有的用戶設置。

請確保您在調用升級後設置NeedsUpgrade ,否則在升級設置時它將被清除。

if (Settings.Default.NeedsUpgrade) 
{ 
    Settings.Default.Upgrade(); 
    Settings.Default.NeedsUpgrade = false; 
    Settings.Default.Save(); 
} 
+0

我不是重新編譯,但是我在IDE中調試,似乎做同樣的事情。無論如何,Upgrade()提示已經解決了這個問題。乾杯。 – Kildareflare 2010-02-05 08:13:33

+0

我遇到了IDE上調試會話的問題(VS.2015)設置被恢復爲默認值。我實現了NeedUpgrade提示,但問題仍然存在。 – 2016-04-06 18:59:31

+1

我剛剛在VS 2015社區中進行了測試,它對我仍然有用。請注意,現在看來這種行爲有點聰明瞭。它不會將NeedUpgrade重置爲true,除非程序集版本更改;只是重建應用程序不會再做。 – technophile 2016-04-07 18:43:09

2

這聽起來像是在您每次啓動新會話時使用默認數據從Visual Studio調試應用程序。

如果你看到這個安裝版本,那麼我猜你實際上並沒有使用字符串值。

+0

啊,就是這樣,乾杯。 – Kildareflare 2010-02-05 08:12:39

相關問題