有沒有辦法在運行時切換出應用程序app.config(current.config爲new.config,文件爲文件)。我有一個備份/恢復過程,需要替換它自己的application.exe.config文件。我已經看到這個post,但它不回答如何在運行時執行此操作。是否可以在運行時切換app.config?
回答
原來,我可以交換新的.config文件,併爲每個部分做一個ConfigurationManager.RefreshSection(...)。它將從新的.config文件更新。
您是否能夠重新啓動應用程序時,你檢測出你需要切換文件?如果是這樣,這只是一個切換文件並重新啓動的問題。現在,棘手的位是if .NET在程序運行時保持app.config文件處於打開狀態。我懷疑它不會,但如果最明顯的方法失敗了,我建議你有第二個應用程序(cfgswitcher.exe)等待命令行中指定的PID終止進程,然後切換配置文件並重新啓動原始過程。然後你的應用程序只需要啓動cfgswitcher.exe(傳入自己的PID作爲命令行參數)並終止。
正如我說的,雖然,這是值得首先嚐試更明顯的方法。
編輯:如果您無法重新啓動應用程序(或在新的AppDomain即使它的一部分),那麼app.config中的各個方面(組件綁定等)不能被改變。如果您只對自己的配置部分感興趣,那麼我建議您將它們存儲在單獨的配置文件中,並在需要時重新加載它們。
只看該ApplicationSettingsBase類提供給您的事件。有PropertyChanged & SettingChanging可能會給你你所需要的。
你也可以看文件,如果它已經改變了調用重載方法來獲取新的設置。
我不認爲完全可以在運行時切換配置而不重新啓動,所以如果你不能應用Jon的方法,你應該試着想出另一種方法。
無論如何,也許它只是我沒有你的情況下足夠的信息,但這種感覺腥。
您確定交換配置文件是達到您需要滿足的任何要求的最佳方法嗎?我的意思是,這是非常罕見的事情。如果我是你,我會試着想出一些其他的方法。
Microsoft .NET的app.config
不適用於您的場景以及許多其他場景。我經常遇到類似的需求,所以我花了很多精力設計解決方案。
重新設計使用
app.config
只能作爲配置引導:指定在哪裏可以找到真實結構數據的其餘部分。這些信息幾乎不會改變,所以不需要處理文件監視或應用程序重新啓動。爲實際配置數據選擇一個替代位置:文件,數據庫,甚至可能是Web服務。大多數情況下我更喜歡數據庫,所以我創建了一個具有簡單結構的配置表,允許我存儲數據。
實現一個簡單的庫來包裝您的配置訪問權限,以便爲應用程序的其餘部分(通過依賴注入)提供一個簡單的API。隱藏
app.config
的使用情況以及您的真實配置存儲位置。由於.NET是強類型的,因此進行配置設置 - 將檢索到的每個字符串轉換爲可用的最具體類型(URL,Int32,FileInfo等)。確定哪些配置設置可以在運行時安全地更改,哪些不能更改。通常情況下,一些設置需要與其他設置一起改變,或者完全沒有意義讓它們改變。如果所有的配置數據都可以在運行時安全地更改,那麼這可以讓事情變得簡單,但我高度懷疑這種情況。儘可能隱藏配置設置的可變性和相互依賴性。
設計對實際配置數據不可用的響應。除非我能確定可用的默認值,否則我寧願將缺少任何配置設置視爲中止應用程序的致命錯誤。同樣,我在沒有配置存儲容器(文件,數據庫表等)的情況下放棄。
享受和祝福。
- 1. 在運行時切換App.Config設置C#
- 2. 是否可以在運行時使用Java切換Class版本?
- 3. 是否可以在運行時切換jar文件?
- 4. 是否可以在運行時切換bean的範圍?
- 5. 在Java中運行時,是否可以將佈局切換到其他佈局?
- 6. 是否可以使用AudioUnit進行實時音高切換?
- 7. 在運行時切換MasterPageFile
- 8. 在運行時切換TraceSwitch
- 9. 是否可以創建「class」運行時?
- 10. 是否可以計算切換?
- 11. 是否可以切換通知?
- 12. 是否可以在基於版本的PHP中進行切換?
- 13. 在切換標籤頁時,VIM是否可以記住模式?
- 14. 是否可以在運行時修改可執行文件?
- 15. 在運行時加載App.Config
- 16. JavaScript是否可以在UIWebView中運行?
- 17. 是否可以在Arduino上運行ZeroMQ
- 18. 是否可以在Linux上運行Azure
- 19. 是否可以在vmplayer上運行fabric8
- 20. 是否可以在CUarray上運行cuMemset?
- 21. 是否可以在heroku上運行scrapy?
- 22. 是否可以在iframe中運行setTimeout?
- 23. 我可以將Visual C++運行時切換到另一堆嗎?
- 24. 是否可以在C#中運行時創建/執行代碼?
- 25. 是否可以減少上下文切換時間
- 26. 是否可以在DHTML運行時加載openlaszlo swf 10運行時組件?
- 27. 是否有可能在運行時
- 28. 是否可以從命令行運行Visual Studio轉換向導?
- 29. 是否可以在Android VM中在運行時檢測ABI?
- 30. 是否可以在運行時在DataTable中定義列類型?
我無法重新啓動應用程序。 – maxfridbe 2009-01-12 19:44:48