問題

だから、長い話をすると、私はアプリケーション自体を介して実行時に変更されるいくつかの設定情報を利用するアプリケーションを開発しています。目的のために、私はSettingsクラスを使用することを考えました。

問題は、アプリケーションのさまざまな実行間に情報が保持されないことです。

実行1)

 Console.WriteLine(Settings.Default["User"]); //prints "Default user"
Settings.Default["User"] = "abc";
Console.WriteLine(Settings.Default["User"]); //prints "abc"
 

ラン2)

 Console.WriteLine(Settings.Default["User"]); //prints "Default user"
Settings.Default["User"] = "abc";
Console.WriteLine(Settings.Default["User"]); //prints "abc"
 

(どちらもまったく同じ出力を出力します)

どちらも同じ最初の印刷「デフォルトユーザー」を表示しますが、2回目の実行では「abc」を取得したいのですが、情報が異なるアプリケーション実行間で保持されていないことを示しています。

私はこれがVisual Studioが.configファイルを処理する方法と関連しているはずだと認めていますが、これを修正する方法を知りたいのですが(厄介な)動作?

  ベストアンサー

デフォルトでは、App.configは直接コピーされず、コンテンツは出力フォルダの<assembly-name>.configファイルに配置されます。コピー設定はこの操作には適用されません。

一般に、アプリケーションが独自のapp.configを変更するのは良い習慣ではありません。同じPC上の複数のユーザーが使用できるアプリケーションを開発している場合、は代わりにSettings を使用します。そうすれば、各ユーザーは自分の設定を持つことができます。

サービスとシステム全体の設定では、別の設定ファイル、レジストリ、データベースのような別のストレージを使用することを検討してください。

設定を保存することについて編集:

設定クラスを使用する場合は、Save()を呼び出してファイルに書き込む必要があります。それ以外の場合は、アプリケーションが閉じられたときに設定の変更が破棄されます。開発中にアプリケーションを頻繁に終了し、終了コードに到達しない場合(通常はSave()を呼び出します)、いくつかのオプションがあります。

  1. デバッガウォッチウィンドウを使用してSave()を呼び出します。これを行うには、ウォッチウィンドウにSettings.Default.Save()のような式を配置し、保存するたびに更新します。
  2. 毎秒 Save を呼び出すためにタイマーを使ってみることができます。
  3. 設定の変更後にコードに Save() コールを挿入することができます。
  4. 変更後すぐに設定を保存するカスタム設定プロバイダまたはラッパーを作成できます。

  同じタグがついた質問を見る

c#visual-studioapp-config