2009-11-25 43 views
5

我正在嘗試在最近的previous question上提及完全相同的事情。從本質上說,這裏的情況下(這正是我一樣的情況):不同的.config文件上的AppSettings不被更新

我的計劃是在他們自己的文件,這些(的appSettings) (的settings.config), ,我將在授予修改 權限到網絡處理用戶 帳戶,並在此文件中存儲所有可編輯的 設置(例如論壇 標題,說明等)。

的問題是,在這個問題接受了解決方案不適合我,因爲不是保存的appSettings在單獨的config文件,當我發出命令config.Save(ConfigurationSaveMode.Minimal, false),它複製了單獨的所有的appSettings文件導入主web.config文件的appSettings部分(使用新的更改)。這是我的最終代碼(在vb.net):

Public Shared Function GetAppSetting(ByVal setting As String) As String 
    Dim config As System.Configuration.Configuration = _ 
      WebConfigurationManager.OpenWebConfiguration("~") 

    Return config.AppSettings.Settings(setting).Value 
End Function 

Public Shared Sub SetAppSetting(ByVal setting As String, ByVal value As String) 
    Dim config As System.Configuration.Configuration = _ 
      WebConfigurationManager.OpenWebConfiguration("~") 

    config.AppSettings.Settings(setting).Value = value 

    config.Save(ConfigurationSaveMode.Minimal, False) 
    ConfigurationManager.RefreshSection("appSettings") 
End Sub 

基本上我看不到的地方我會說明我想要的設置保存在單獨的文件,而不是在這是在web.config它們默認存儲在哪裏。哦,順便說一下,我不得不在web.config的appSettings部分添加'file ='屬性,以便Settings.config appSettings會被實際考慮。沒有該屬性,上面的代碼不會讀取單獨的.config文件設置。這裏是我的web.config中appSettings部分的快照:

<appSettings file="Settings.config"> 
    <add key="RestartApp" value="-1" /> 
    </appSettings> 

而且這裏是我的settings.config文件的全部內容:

<appSettings> 
    <add key="AppTitle" value="MVC Web Access" /> 
    <add key="DefaultWebpage" /> 
    <add key="CustomCSS" /> 
    <add key="TktsEmailTo" value="[email protected]" /> 
    <add key="EmailFrom" value="[email protected]" /> 
    <add key="EmailFromSMTP" value="mail.email.com" /> 
    <add key="EmailFromPW" value="fakePassword" /> 
    </appSettings> 

因此,而不是與修改後的設置結束了的我的Settings.config文件在.save命令後,web.config文件上的我的appSettings部分最終像這樣(並且Settings.config文件保持不變):

<appSettings file="Settings.config"> 
    <add key="RestartApp" value="-1" /> 
    <add key="AppTitle" value="New title" /> 
    <add key="DefaultWebpage" value="index.aspx" /> 
    <add key="CustomCSS" /> 
    <add key="TktsEmailTo" value="[email protected]" /> 
    <add key="EmailFrom" value="[email protected]" /> 
    <add key="EmailFromSMTP" value="mail.email.com" /> 
    <add key="EmailFromPW" value="NewFakePassword" /> 
    </appSettings> 
+0

嗯,我會再看看我的代碼,看看我能否發現你正在做的任何差異... – 2009-11-25 20:20:28

+0

Kurt - 實際上我的例子*是*使用單獨的.config文件,雙重檢查,它工作正常。 – 2009-11-25 20:29:47

+0

我對前一個問題的回答主要集中在獲取已發佈的代碼 - 只處理web.config的代碼。我其實不確定你是否可以用一個單獨的配置文件來做到這一點......除非Keith實際上是這樣做的。 – 2009-11-25 20:30:47

回答

2

只是雙重檢查 - 我能看到的唯一區別是,我使用

 
<appSettings configSource="Settings.config"/> 

下面是我使用的是現在,這是工作和設置保存到我的單獨的設置文件中的代碼(的settings.config):

 
var config = WebConfigurationManager.OpenWebConfiguration("~"); 

foreach (var key in collection.Keys) 
{ 
    if (config.AppSettings.Settings[key.ToString()] != null) 
    { 
     config.AppSettings.Settings[key.ToString()].Value = collection[key.ToString()]; 
    } 
} 

config.Save(ConfigurationSaveMode.Minimal, false); 
ConfigurationManager.RefreshSection("appSettings"); 

如果您在appSettings鍵使用configSource會發生什麼?

+0

我會試一試...我讀了這個設置,但沒有嘗試它,因爲我明白,如果使用,我將能夠具有單獨的appSettings的外部.config文件,還有其他appSettings web.config文件的相應部分。我基本上想要保留「」設置,以便給用戶一個選項來重新啓動應用程序,而不是始終在appSettings更改時重新啓動。無論如何,我會測試這個選項,並回應與迴應。謝謝。 – 2009-11-26 17:47:48

+0

我有同樣的問題。切換到configSource解決了我的問題。謝謝。 – 2011-11-09 14:18:24