簡體   English   中英

是否可以在運行時切換app.config?

[英]Is switching app.config at runtime possible?

有沒有辦法在運行時切換應用程序app.config(current.config到new.config,文件為file)。 我有一個備份/恢復過程,需要替換自己的application.exe.config文件。 我看過這篇文章,但它沒有回答如何在運行時這樣做。

事實證明,我可以將.config文件替換為新文件,並為每個部分執行ConfigurationManager.RefreshSection(...)。 它將從新的.config文件更新。

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

  1. 重新設計為僅將app.config用作配置引導程序:指定在何處查找其他實際配置數據。 此信息幾乎不會更改,因此無需處理文件監視或應用程序重新啟動。

  2. 為實際配置數據選擇一個備用位置:文件,數據庫,甚至是Web服務。 我大多數時候都喜歡數據庫,所以我創建了一個配置表,其結構簡單,允許我存儲我的數據。

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

  4. 確定可以在運行時安全地更改哪些配置設置與不能安全更改的配置設置。 通常,某些設置需要與其他設置一起更改,或者根本不允許它們進行更改。 如果所有配置數據都可以在運行時安全地更改,那么這會讓事情變得簡單,但我強烈懷疑這種情況。 盡可能隱藏配置設置的可變性和相互依賴性。

  5. 設計對實際配置數據不可用的響應。 我更喜歡將缺少任何配置設置視為中止應用程序的致命錯誤,除非我可以識別可用的默認值。 同樣,我在沒有配置存儲容器(文件,數據庫表等)的情況下中止。

享受,祝福。

當您檢測到需要切換文件時,是否能夠重新啟動應用程序? 如果是這樣,只需切換文件並重新啟動即可。 現在,棘手的一點是, 如果 .NET在程序運行時保持app.config文件打開。 我懷疑它沒有,但如果最明顯的方法失敗,我建議你有第二個應用程序(cfgswitcher.exe)等待進程,在命令行上指定的PID終止,然后切換配置文件並重新啟動原始過程。 然后你的應用程序只需要啟動cfgswitcher.exe(傳遞自己的PID作為命令行參數)並終止。

正如我所說,首先嘗試更明顯的方法是值得的。

編輯:如果您無法重新啟動應用程序(或甚至是新的AppDomain中的部分應用程序),則無法更改app.config(程序集綁定等)的各個方面。 如果您只對自己的配置部分更改感興趣,那么我建議您將它們存儲在單獨的配置文件中,並在需要時重新加載它們。

查看ApplicationSettingsBase類上可用的事件。 有PropertyChanged和SettingChanging可以為您提供所需。

您還可以查看該文件,如果已更改,請調用重新加載方法以獲取新設置。

我認為根本不可能在沒有重新啟動的情況下在運行時切換配置,所以如果你不能應用Jon的方法,你應該嘗試提出另一種方法。

無論如何,也許只是我沒有足夠的關於你的場景的信息,但這種感覺很可疑。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM