有沒有辦法在運行時切換出應用程序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. 是否可以在運行時切換jar文件?
- 3. 是否可以在運行時使用Java切換Class版本?
- 4. 在運行時切換MasterPageFile
- 5. 在運行時切換TraceSwitch
- 6. 是否可以創建「class」運行時?
- 7. 是否可以切換通知?
- 8. 是否可以在基於版本的PHP中進行切換?
- 9. 在切換標籤頁時,VIM是否可以記住模式?
- 10. 在運行時加載App.Config
- 11. JavaScript是否可以在UIWebView中運行?
- 12. 是否可以在iframe中運行setTimeout?
- 13. 是否可以在Arduino上運行ZeroMQ
- 14. 是否可以在CUarray上運行cuMemset?
- 15. 是否可以在vmplayer上運行fabric8
- 16. 我可以將Visual C++運行時切換到另一堆嗎?
- 17. 是否可以在C#中運行時創建/執行代碼?
- 18. 是否有可能在運行時
- 19. 是否可以在運行時爲.NET應用程序切換應用程序配置文件?
- 20. 是否有可能在運行時交換C函數實現?
- 21. 切換Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden在運行時
- 22. 如何在運行時切換resx?
- 23. .NET中app.config文件的可用運行時設置是什麼?
- 24. app.config僅在編譯時使用,還是在運行時需要?
- 25. 註解變量是否可以在運行時確定?
- 26. 在Visual Studio中運行時,是否可以忽略app_offline?
- 27. Microsoft Unity - 是否可以在運行時更改註冊類型?
- 28. 是否可以在運行時添加YAWS appmods配置?
- 29. 是否可以調試在運行時編譯的代碼?
- 30. 是否可以在運行時將接口分配給對象?
我無法重新啓動應用程序。 – maxfridbe 2009-01-12 19:44:48