4

.netFramework4.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()を呼び出し、ボタンが押されたときにデータを保存します([OK]または[適用])。アプリケーションを閉じて再実行しますが、app.configファイルは変更されません。

何か案は???

4

2 に答える 2

9

Visual Studioでテストしていると、App.ConfigがDebug / Releaseディレクトリにコピーされ、名前がYourApplication.vshost.exe.configに変更されます。これは、アプリケーションを起動するたびにリセットされます。YourApplication.exe.configファイルを使用するVisualStudioの外部で実行可能ファイルを実行してみて、それが機能するかどうかを確認してください。コードは私のために機能しており、Visual Studioの外部で実行した場合、アプリケーションの再起動時に変更を保持します。

于 2012-10-30T05:14:51.240 に答える
1

通常、私はこれを行います:

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

正常に動作します。キーの1つがまだapp.configにないためだと思います。(上記のコードのように)削除/追加するか、最初にapp.configでキーを作成する必要があります。

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

これを試して:

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

それ以外の

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

違いはありますか?

于 2012-10-29T22:46:35.357 に答える