2013-02-18 91 views
7

我的程序內置了一些設置,其中都有一個用戶範圍。但是,當程序啓動時,它只會創建包含設置的AppName.exe.config文件。user.config文件沒有被創建,但app.config是?

稍後在運行時保存設置時,它會在AppData/Local/AppName /位置創建user.config文件(以前不存在),但該文件只包含保存的設置。

爲什麼會發生這種情況?爲什麼不創建user.config或在啓動時使用它,如果它存在?

+0

+1 from me。請回復你來的解決方案,因爲這是一個很好的問題恕我直言。有很多解決方案可以在不同的應用程序之間共享app.config文件(即不僅僅是同一個應用程序域中的類/表單),而且這些將可能會在應用程序中選擇任何user.config(s)開始(這將解決您對多個文件的關注),但是我找不到直接解決獲取最新的共享配置的情況,其中user.config文件可能已被其中一個共享應用更新在運行時。 – Sepster 2013-02-18 15:07:41

回答

3

Application Settings Architecture at MSDN

  1. 應用範圍設置可以存儲在任的machine.config或app.exe.config文件。 Machine.config始終爲 只讀,而app.exe.config受安全性 考慮因素限制爲只讀,適用於大多數應用程序。

  2. 用戶範圍設置可以存儲在app.exe.config文件中,在這種情況下,它們被視爲靜態默認值。

  3. 非默認的用戶範圍設置存儲在一個新文件user.config中,其中用戶是當前執行該應用程序的人員的用戶名 。您可以使用DefaultSettingValueAttribute爲用戶範圍的 設置指定默認值。由於用戶範圍 設置在應用程序執行過程中經常發生更改,因此user.config始終爲可讀/寫的 。

你看到的首先是(你叫什麼)你的「建在設置」存儲爲(微軟所謂的)「靜態默認」用戶範圍的設置,獲取存儲在app.exe(按照2)。

然後,當你在運行時寫回你的設置時,它們被視爲「非默認」用戶範圍設置,並且它們被寫入user.config(按照3),因此爲什麼只有這樣做你會看到創建的user.config文件。

總之,只要用戶範圍設置對每個人都是相同的(默認值),則不需要每個用戶的user.config文件。

+0

是否有可能將它全部推送到該文件?因爲我有一個服務和一個使用它們的表單,並且會發生什麼,當表單更新一個值時,它會生成此user.config文件,然後該服務仍然從app.config文件中提取值:S – JonE 2013-02-18 14:37:29

+0

我不是確保你能夠在兩個不同的應用程序之間「共享」一個配置(一個app.config,或者與一個或多個user.config文件結合)。 AFAIK沒有辦法讓'LocalFileSettingsProvider'知道它綁定的配置文件已經被外部源更新了。我懷疑你需要實現你自己派生的'SettingsProvider'(或者在'網絡上有東西可以做你需要的東西')。 – Sepster 2013-02-18 14:44:18

+0

或者,您可以嘗試[LocalFileSettingsProvider.GetPropertyValues](http://msdn.microsoft.com/en-au/library/system.configuration.localfilesettingsprovider.getpropertyvalues.aspx)或[LocalFileSettingsProvider.Initialize](http:// msdn.microsoft.com/en-au/library/system.configuration.localfilesettingsprovider.initialize.aspx)來查看是否其中任何一個刷新了它們的緩存設置,其中一個是從組合的app.config/user.config文件中新讀取的。在訪問設置之前執行此操作可能只是解決問題:它可能會識別新的user.config文件。 – Sepster 2013-02-18 15:00:34

相關問題