0

以下は、app.configのappsettingの値を更新または変更するために使用しているコードです

 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);              
 config.AppSettings.Settings["userName"].Value = username;
 config.AppSettings.Settings["pwd"].Value = pwd;
 config.Save(ConfigurationSaveMode.Modified, true);                
 ConfigurationManager.RefreshSection("appSettings");

上記のコードを使用して、実行時に appsetting セクションの設定を変更または更新し、変更を保持して、アプリケーションを実行するときに appsettings から新しい値を選択する必要がありますが、ここでは変更が行われないため、変更が行われて保存されます実行時に、アプリケーションを再起動しても保持されず、古いデフォルト設定になっています。また、bin/debug で app.config を確認しましたが、appsettings にも古い値が含まれていました。いろいろなブログを参考にこちらにも投稿しましたが、上記と同じコードになりましたが、設定が保持されませんでした。この投稿を参照しました

4

3 に答える 3

0

上記の問題の解決策を得ました。私の目標は、アプリケーションまたはユーザーレベルで実行時に行われた変更を保持することでした。最初は、app.config の appsettings セクションでアプリケーションのデフォルト設定を保持する App.config を使用しようとしましたが、後で調査した後、appsetting が変更を保持しないことを知りました。代わりに、YourApplication の下の userSettings セクションを使用できます。 .Property.Settings は、ユーザーレベルの設定を与えることができ、私にとってはうまくいきました。これを行うには、App.config に移動して手動で行う必要はなく、プロジェクトのプロパティ ウィンドウから行うことができます。

プロジェクトを右クリック -> 左側の [Settings] タブを選択 -> 右側に [Resource] セクションが表示され、ResourceName、Type、Scope およびその値を指定すると完了です。コードからも同じ値にアクセスして動的に変更できます。以下は同じコードの抜粋です -

設定値へのアクセス

enter code here
        userName = Properties.Settings.Default.UserName;
        pwd = Properties.Settings.Default.PWD;

新しい設定を保存する

enter code here
        Properties.Settings.Default.UserName = userName.ToString();
        Properties.Settings.Default.PWD = newPWD..ToString();
        Properties.Settings.Default.Save();

次にアプリケーションを起動すると、新しく変更された設定がデフォルト設定として取得されます。それが助けになることを願っています

VJ

于 2013-04-19T06:21:51.633 に答える
0

以下 (MSDN から) を参照し、app.config がプロジェクトにあることを覚えておいてください。.exe.config は実際のファイル名です。クライアント アプリケーションは、すべてのユーザーに適用されるグローバル構成、個々のユーザーに適用される個別の構成、およびローミング ユーザーに適用される構成を使用します。userLevel パラメーターは、ユーザー レベルがない (構成ファイルがアプリケーションと同じディレクトリにある) か、ユーザーごとのレベルがある (構成ファイルがアプリケーション設定パスにある) かを示すことによって、開かれている構成ファイルの場所を決定します。ユーザーレベルによって決定されます)。

userLevel に次のいずれかの値を渡して、取得する構成を指定します。

To get the Configuration object that applies to all users, set userLevel to None.

To get the local Configuration object that applies to the current user, set userLevel to PerUserRoamingAndLocal.

To get the roaming Configuration object that applies to the current user, set userLevel to PerUserRoaming.
NoteNote

To get the Configuration object for a resource, your code must have read permissions on all the configuration files from which it inherits settings. To update a configuration file, your code must additionally have write permissions for both the configuration file and the directory in which it exists.
于 2013-04-19T04:08:38.363 に答える
0

私は少し前に同じ問題を抱えていました。これをコメントに入れたかったのですが、私にはその権限がありません。私の答えはあなたのケースではないかもしれませんが、共有する価値があると思います.

bin フォルダーの場所をお尋ねしてもよろしいですか? Windows 7 では、ユーザーがアクセスできるスペースにないファイルをプログラムで変更すると、そのファイルのコピーがローミング スペースに作成され、そこにファイルが残ります。ファイル(app.configなど)にアクセスしようとするたびに、W7は読み取り/書き込みをこのファイルに透過的にリダイレクトするため、ローミングスペースでファイルを変更し、見ているファイルを変更しない可能性があります.

行った変更は、アプリケーションを起動するたびにまだ残っていますか?

免責事項/お詫び: 私は経験豊富なユーザーではないので、ばかげたことを言っている場合はお知らせください。このコメントは削除します。

于 2013-04-18T12:04:37.127 に答える