2017-03-10 212 views
1

所以我已經做了很多研究,試圖解決這個問題,但似乎無法1)重現問題,但更重要的是2)找到一個更新的解決方案,以修復它。User.config損壞

它已經在2周內發生過兩次,隨機的user.config文件將被損壞(例如,將丟失XML文件塊),從而導致下次啓動時應用程序崩潰。

Cliffnotes:

  1. 我需要處理這一問題編程(即無論是從CodeProject Handling Of Corrupted User Config崗位或不同崗位的先進的最新解決方案

  2. 我還需要一個可重複的情況下,「損壞」user.config文件(除了刪除它的塊,因爲它不適用於我)能夠測試#1以上的內容

個解決我遇到:

  1. 我知道,你可以手動導航到瘋狂的路徑(.../AppData的/..././ 1.0.0.0/user.config),並刪除它並重新運行應用程序,但是,這不適合我們。我們需要能夠以編程方式捕捉這個錯誤,並相應地處理它。如果可能的話,最好不必重新啓動應用程序。

  2. 我已經發現了幾個帖子/答案,一些稍微不同的版本本文CodeProject Handling Of Corrupted User Config 他們請使用相同的機制,鏈接,或使用ConfigurationManager中命令打開配置文件並捕獲異常。

我已經試過:

  1. 我的一個問題是,我似乎無法訪問C#4.5.2 ConfigurationManager中類。但MSDN文檔說它在當前框架中可用。所以我真的不能嘗試

  2. 當我嘗試手動「損壞」我的user.config文件來測試我的解決方案時,它沒有給我任何問題,並且應用程序工作正常......這是令人擔憂的,因爲我無法找到一個可重複的情況下,以測試定解決方案是否有效(即,在上面的鏈接提供的一個不使用ConfigurationManager中)

任何幫助將不勝感激!

+0

有人有任何線索或提示可能可以幫助嗎? – hpradogu

+0

將一些二進制文件放在那裏(如.dotx文件)以重現問題 –

+0

就像同一個目錄中的新文件一樣?是不是「只」搜索user.config?或者我錯過了什麼? – hpradogu

回答

0

要手動破壞您的文件,只需刪除其中的所有文本並保存該文件。

爲了訪問ConfigurationManager類,您必須添加一個DLL參考System.Configuration。如果您需要幫助添加引用,這些都是上市online步驟:

  1. 在Solution Explorer中,右鍵單擊該項目節點,然後單擊添加引用。
  2. 在「添加引用」對話框中,選擇指示要引用的組件類型的選項卡。
  3. 選擇要引用的組件,然後單擊確定。

爲了解釋腐敗,你可以使用try/catch塊這樣的:

try { 
    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); 
} 
catch (ConfigurationErrorsException exception) { 
    Console.WriteLine("Settings are Corrupt!!"); 
    // handle error or tell user 
    // to manually delete the file, you can do the following: 
    File.Delete(exception.Filename); // this can throw an exception too, so be wary! 
} 

編輯:爲進一步的說明,請注意,如果你有一個Settings.Upgrade()調用任何地方,你的「舊的「文件已損壞,這也會導致軟件崩潰。請確保將您的Settings.Upgrade()呼叫與try/catch塊同時包圍。