2009-01-12 63 views
8

有沒有辦法在運行時切換出應用程序app.config(current.config爲new.config,文件爲文件)。我有一個備份/恢復過程,需要替換它自己的application.exe.config文件。我已經看到這個post,但它不回答如何在運行時執行此操作。是否可以在運行時切換app.config?

回答

10

原來,我可以交換新的.config文件,併爲每個部分做一個ConfigurationManager.RefreshSection(...)。它將從新的.config文件更新。

2

您是否能夠重新啓動應用程序時,你檢測出你需要切換文件?如果是這樣,這只是一個切換文件並重新啓動的問題。現在,棘手的位是if .NET在程序運行時保持app.config文件處於打開狀態。我懷疑它不會,但如果最明顯的方法失敗了,我建議你有第二個應用程序(cfgswitcher.exe)等待命令行中指定的PID終止進程,然後切換配置文件並重新啓動原始過程。然後你的應用程序只需要啓動cfgswitcher.exe(傳入自己的PID作爲命令行參數)並終止。

正如我說的,雖然,這是值得首先嚐試更明顯的方法。

編輯:如果您無法重新啓動應用程序(或在新的AppDomain即使它的一部分),那麼app.config中的各個方面(組件綁定等)不能被改變。如果您只對自己的配置部分感興趣,那麼我建議您將它們存儲在單獨的配置文件中,並在需要時重新加載它們。

+0

我無法重新啓動應用程序。 – maxfridbe 2009-01-12 19:44:48

0

只看該ApplicationSettingsBase類提供給您的事件。有PropertyChanged & SettingChanging可能會給你你所需要的。

你也可以看文件,如果它已經改變了調用重載方法來獲取新的設置。

0

我不認爲完全可以在運行時切換配置而不重新啓動,所以如果你不能應用Jon的方法,你應該試着想出另一種方法。

無論如何,也許它只是我沒有你的情況下足夠的信息,但這種感覺腥。

您確定交換配置文件是達到您需要滿足的任何要求的最佳方法嗎?我的意思是,這是非常罕見的事情。如果我是你,我會試着想出一些其他的方法。

5

Microsoft .NET的app.config不適用於您的場景以及許多其他場景。我經常遇到類似的需求,所以我花了很多精力設計解決方案。

  1. 重新設計使用app.config只能作爲配置引導:指定在哪裏可以找到真實結構數據的其餘部分。這些信息幾乎不會改變,所以不需要處理文件監視或應用程序重新啓動。

  2. 爲實際配置數據選擇一個替代位置:文件,數據庫,甚至可能是Web服務。大多數情況下我更喜歡數據庫,所以我創建了一個具有簡單結構的配置表,允許我存儲數據。

  3. 實現一個簡單的庫來包裝您的配置訪問權限,以便爲應用程序的其餘部分(通過依賴注入)提供一個簡單的API。隱藏app.config的使用情況以及您的真實配置存儲位置。由於.NET是強類型的,因此進行配置設置 - 將檢索到的每個字符串轉換爲可用的最具體類型(URL,Int32,FileInfo等)。

  4. 確定哪些配置設置可以在運行時安全地更改,哪些不能更改。通常情況下,一些設置需要與其他設置一起改變,或者完全沒有意義讓它們改變。如果所有的配置數據都可以在運行時安全地更改,那麼這可以讓事情變得簡單,但我高度懷疑這種情況。儘可能隱藏配置設置的可變性和相互依賴性。

  5. 設計對實際配置數據不可用的響應。除非我能確定可用的默認值,否則我寧願將缺少任何配置設置視爲中止應用程序的致命錯誤。同樣,我在沒有配置存儲容器(文件,數據庫表等)的情況下放棄。

享受和祝福。

相關問題