值未添加到app.config中的appSettings

时间:2015-05-22 17:34:50

标签: c# winforms app-config

我已经完成了我的代码,似乎一切正常。我从异步响应中获取了两个值,我正在尝试将其写入appSettings中的app.Config但是......当我强制刷新app.config时,没有值在那里。

获取和写入app.config的值的代码是

public void Authenticated(Action success, Action<Exception> failure)
{
    Client.GetAccessTokenAsync((accessToken) =>
    {
        UserToken = accessToken.Token;
        UserSecret = accessToken.Secret;

        var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        var settings = config.AppSettings.Settings;

        if (settings["userLoginSecret"] == null && settings["userLoginToken"] == null)
        {
            settings.Add("userLoginSecret", UserSecret);
            settings.Add("userLoginToken", UserToken);
        }
        config.Save(ConfigurationSaveMode.Modified);
        ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name);

        if (success != null) success();
    },
    (error) =>
    {
        if (failure != null) failure(error);
    });
}

我的app.Config文件就像这样:

<appSettings>
  <add key="userLoginToken" value=""/>
  <add key="userLoginSecret" value=""/>
</appSettings>`

任何帮助都非常感谢....

2 个答案:

答案 0 :(得分:1)

当您在调试中在Visual Studio中运行应用程序时,实际修改的配置文件是 appname.vshost.exe.config ,因此请务必检查正确的文件。

编译项目时,要修改的文件是 appname.exe.config ,而不是源代码文件夹中的app.config。

如果要在调试期间测试正常的.exe.config文件,则应取消选中框&#34;启用Visual Studio托管过程&#34;在&#34; Debug&#34;项目属性的选项卡。

此外,如果您的app.config文件中已存在两个密钥,请使用以下代码段:

 if (settings["userLoginSecret"] == null && settings["userLoginToken"] == null)
    {
        settings.Add("userLoginSecret", UserSecret);
        settings.Add("userLoginToken", UserToken);
    }

仅在条件满足且键不存在时才插入值。如果您想要更新值,如果它们已经插入,您应该添加:

else
    {
        settings["userLoginSecret"].Value = UserSecret;
        settings["userLoginToken"].Value = UserToken;
    }

答案 1 :(得分:0)

请考虑添加“设置”,而不是使用ConfigurationManager Project\Properties\Settings.settings

确保您的设置范围为&#34;用户&#34;

然后您可以通过代码写入设置:

Properties.Settings.Default.SettingName = "Value";
Properties.Settings.Default.Save();

要阅读设置:

String value = Properties.Settings.Default.SettingName;