4

我正在.net framework 4.5 上创建一个应用程序

每当我想加载应用程序配置值(appSettings 部分)并写入更改时,如果我刷新该部分,我就看不到我的更改。我做错了什么?我该如何解决?

代码

    private void LoadConfig()
    {
        NameValueCollection appSettings = ConfigurationManager.AppSettings;
        for (int i = 0; i < appSettings.Count; i++)
        {
            switch (appSettings.GetKey(i))
            {
                case "initialCatalog":
                    txtInitialCatalog.Text = appSettings.GetValues(i)[0];
                    break;
                case "dataSource":
                    txtDatasource.Text = appSettings.GetValues(i)[0];
                    break;
                case "userName":
                    txtUsername.Text = appSettings.GetValues(i)[0];
                    break;
                case "password":
                    txtPassword.Text = appSettings.GetValues(i)[0];
                    break;
                case "portalUrl":
                    txtUrl.Text = appSettings.GetValues(i)[0];
                    break;
            }
        }
    }

    private void SaveConfig()
    {
        System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        KeyValueConfigurationCollection appSettings = config.AppSettings.Settings;
        appSettings["initialCatalog"].Value = txtInitialCatalog.Text;
        appSettings["dataSource"].Value = txtDatasource.Text;
        appSettings["userName"].Value = txtUsername.Text;
        appSettings["password"].Value = txtPassword.Text;
        appSettings["portalUrl"].Value = txtUrl.Text;
        config.Save(ConfigurationSaveMode.Modified);
        ConfigurationManager.RefreshSection("appSettings");
    }

App.config 文件

<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <appSettings>
    <add key="initialCatalog" value="a" />
    <add key="dataSource" value="b" />
    <add key="password" value="c" />
    <add key="userName" value="d" />
    <add key="portalUrl" value="e" />
    <add key="poolingTime" value="60000" />
    <add key="ClientSettingsProvider.ServiceUri" value="" />
  </appSettings>

我在表单被激活时调用 ReadConfig() 并在按下按钮时保存数据(确定或应用)我关闭应用程序我重新运行它但对 app.config 文件没有任何更改

有任何想法吗???

4

2 回答 2

9

我认为正在发生的事情是您正在 Visual Studio 中进行测试,它将 App.Config 复制到您的 Debug/Release 目录并将其重命名为 YourApplication.vshost.exe.config ,每次启动应用程序时都会重置。尝试在 Visual Studio 之外运行将使用 YourApplication.exe.config 文件的可执行文件,看看它是否适合您。如果我在 Visual Studio 之外运行,您的代码对我有用,并在应用程序重新启动时保留您的更改。

于 2012-10-30T05:14:51.240 回答
1

通常,我这样做:

 ...
 config.AppSettings.Settings.Remove("TextBoxNumber");
 config.AppSettings.Settings.Add("TextBoxNumber", "");

它工作正常。我想这是因为您的密钥之一尚未在 app.config 中。您需要删除/添加它(如上面的代码),或者首先在 app.config 中创建密钥。

===================== 更新

尝试这个:

 config.AppSettings.Settings["initialCatalog"].Value = txtInitialCatalog.Text;

代替

 appSettings["initialCatalog"].Value = txtInitialCatalog.Text;

有什么区别吗?

于 2012-10-29T22:46:35.357 回答