2013-04-18 31 views
0

下面是我使用更新或app.config中無法在app.config WPF中的appsetting部分中保留新更改?

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);    
config.AppSettings.Settings["userName"].Value = username; 
config.AppSettings.Settings["pwd"].Value = pwd; 
config.Save(ConfigurationSaveMode.Modified, true);     
ConfigurationManager.RefreshSection("appSettings"); 

我使用上面的代碼更改或appsetting在運行時部分更新的設置更改appsetting的價值和希望更改持續存在的代碼所以當我運行應用程序時,它應該從appsettings中選擇新的值,但是在這裏它不會發生,因此在運行時進行的更改和保存不會保留,因爲當我重新啓動應用程序時,它具有舊的默認設置。此外,我檢查bin/debug中的app.config,但它也有appsettings中的舊值。我提到了各種博客,並在這裏發帖以作爲參考,但它獲得了與上面相同的代碼,但它沒有保留設置。 have referred this post

+0

凡要檢查新值?在代碼或app.config? –

+0

在App.config中,當用戶給出一個新的用戶名和密碼時,我的應用程序應該覆蓋在aspp.config中appsettings中設置的默認用戶名和密碼,並且下次我啓動時我想要最後更新的用戶名和密碼,因此我正在尋找這樣我可以堅持對app.config中的appsettings值進行任何更改。但不知何故上面的代碼不會保存appsettings中的新值。 –

回答

0

我前一陣子有同樣的問題。我本來希望把這個置於評論中,但我沒有這個特權。我的回答可能不是你的情況,但我認爲值得分享。

請問你的bin文件夾在哪裏? Windows 7以編程方式更改不在用戶可訪問空間中的文件時,會在漫遊空間中創建該文件的副本,並且該文件將保留。每次嘗試訪問文件時(例如app.config),W7都會將讀取/寫入透明地重定向到此文件,因此您有可能在漫遊空間中修改文件,而使您所看到的文件保持不變。

您正在進行的更改是否仍然是您連續啓動應用程序的時間?

免責聲明/道歉:我不是一個有經驗的用戶,所以如果我說愚蠢的事情讓我知道,我會刪除此評論。

+0

抱歉,您的回覆與我的問題無關。關於bin文件夾,當你創建&建立wpf項目時它默認位於項目文件夾裏 –

+0

也許我使用了錯誤的措辭並做了一些不準確的假設,但@Ramesh在另一個答案中或多或少地說了我所說的話。你可以檢查下一次運行應用程序是否從app.config中恢復正確的數據? – misleadingTitle

+0

我再次。檢查[此鏈接](http://www.interworks.com/blogs/dsmith/2011/09/21/disabling-windows-7-virtual-store)爲了禁用W7虛擬商店這是安全策略我相信是造成你的問題。 我已經試過你的代碼,並用procmon分析可執行文件我已經看到他在虛擬商店中訪問該文件。 – misleadingTitle

0

見下文(從MSDN),並記住的app.config是在您的項目。 .exe.config是實際的文件名。 客戶端應用程序使用適用於所有用戶的全局配置,適用於單個用戶的單獨配置以及適用於漫遊用戶的配置。 userLevel參數通過指示它是否沒有用戶級別(配置文件與應用程序位於同一目錄中)或每個用戶級別(配置文件位於應用程序設置路徑中)來確定正在打開的配置文件的位置由用戶級別確定)。

指定在通過下面值之一的UserLevel得到哪些配置:

To get the Configuration object that applies to all users, set userLevel to None. 

To get the local Configuration object that applies to the current user, set userLevel to PerUserRoamingAndLocal. 

To get the roaming Configuration object that applies to the current user, set userLevel to PerUserRoaming. 
NoteNote 

To get the Configuration object for a resource, your code must have read permissions on all the configuration files from which it inherits settings. To update a configuration file, your code must additionally have write permissions for both the configuration file and the directory in which it exists. 
0

我得到了我的上述問題的解決方案,我的目標是堅持在運行時在應用程序或用戶級別進行變化。最初我嘗試使用App.config,其中我保留app.config appsettings部分中的應用程序的默認設置,但後來在研究後,我必須參考我知道appsetting不會保留更改,而是可以使用userSettings部分,在YourApplication下.Property.Settings你可以給你的用戶級別的設置,它爲我工作。要做到這一點,您不需要手動進入App.config,而是可以從項目的屬性窗口執行此操作。

右鍵單擊您的項目 - >選擇設置選項卡左側 - >現在右側您將看到資源部分,給出資源名稱,類型,範圍和它的值,你就完成了。相同的值也可以從代碼中動態訪問和更改。 下面是摘錄的代碼爲同 -

訪問設置值

enter code here 
     userName = Properties.Settings.Default.UserName; 
     pwd = Properties.Settings.Default.PWD; 

保存新設置返回

enter code here 
     Properties.Settings.Default.UserName = userName.ToString(); 
     Properties.Settings.Default.PWD = newPWD..ToString(); 
     Properties.Settings.Default.Save(); 

而當你將推出下一次你的應用程序,你會得到新的變化設置作爲您的默認設置。 我希望幫助 謝謝你們

VJ

相關問題