AppSettings在另一个.config文件上没有更新

时间:2009-11-25 19:30:45

标签: asp.net-mvc configuration-files

我正在努力做到最近previous question提到的完全相同的事情。从本质上讲,就是这种情况(这是完全相同的情况):

  

我的计划是拥有这些(appSettings)   在他们自己的文件(Settings.config)中,   我将授予修改   对Web进程用户的权限   帐户,并存储所有可编辑   此文件中的设置(例如论坛   标题,描述等)。

问题是该问题中接受的解决方案对我不起作用,因为当我发出config.Save(ConfigurationSaveMode.Minimal, false)命令时,它不是将appSettings保存在单独的.config文件中,而是复制所有的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中。哦,顺便说一句,我必须在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@email.com" />
    <add key="EmailFrom" value="email@email.com" />
    <add key="EmailFromSMTP" value="mail.email.com" />
    <add key="EmailFromPW" value="fakePassword" />
  </appSettings>

因此,在.save命令之后,我的Settings.config文件上的修改设置不会结束,而是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="newemail@email.com" />
    <add key="EmailFrom" value="newemail@email.com" />
    <add key="EmailFromSMTP" value="mail.email.com" />
    <add key="EmailFromPW" value="NewFakePassword" />
  </appSettings>

1 个答案:

答案 0 :(得分: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");

如果您在configSource密钥上使用appSettings会怎样?

相关问题