web-dev-qa-db-ja.com

App.configでのAppSettingsの変更が実行時に考慮されないのはなぜですか? (コンソールアプリケーション)

独自のApp.configを持つコンソールアプリケーションがあります。

セクションのいくつかの値を時々変更する必要があります。

私の問題は、bin/debugフォルダー内でexeを実行すると、関連するアプリ設定が正しく取得されることです。しかし、いくつかのキーと値のペアの値を編集および変更してexeを再実行すると、元の値が読み取られます。

(再実行とは、MyTool.exeを呼び出してコマンドプロンプトでアプリケーションを実行することを意味します)

電話してみました

ConfigurationManager.RefreshSection("appSettings");

私のメインメソッドの始めに。しかし、助けにはならなかった。

あなたがアドバイスしていただけますか?ありがとう

13
pencilCake

しかし、いくつかのキーと値のペアの値を編集および変更してexeを再実行すると、元の値が読み取られます。

このexeをどのように再実行しているかによって異なります。 Visual Studioでこれを行う場合は、 F5、VSは、プロジェクト内のapp.configファイルを出力にコピーし、名前を_AppName.exe.config_に変更するだけです。したがって、変更を考慮に入れる場合は、_AppName.exe.config_(_App.config_ではなく)を変更してから、Windowsエクスプローラーから実行可能ファイルを実行する必要があります。

そうは言っても、App.configは1回だけ読み取られて解析されます。アプリケーションの起動時。次に、アプリケーションが何らかの値を要求するたびにコストのかかるXML解析を回避するために、値がキャッシュされます。

App.configは、変更されるべきではない構成値を格納するように設計されています。構成値を動的に変更する必要がある場合は、ファイル、データベース、...などの他のストレージメカニズムを使用する必要があります。

ただし、ConfigurationManager.RefreshSection("appSettings");メソッドは機能するはずです。 _AppName.exe.config_ファイルを変更したら、このメソッドを呼び出し、_ConfigurationManager.AppSettings["someKey"];_を使用して必要な値を再フェッチすると、新しい値が返されます。

36
Darin Dimitrov
  Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// change ConnectionString in App.Config for Entity FrameWork Object....
 //..... 
config.Save();

設定ファイルを保存していますか?

0