2012-07-13 12 views
10

私は独自のApp.configを持つコンソールアプリケーションを持っています。App.configのAppSettingsの変更が実行時に考慮されないのはなぜですか? (コンソールアプリケーション)

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

私の問題は、bin/debugフォルダ内のexeファイルを実行すると、適切なappsettingsが正しく取得されることです。しかし、いくつかのキー/値ペアの値を編集して変更し、EXEをRE-RUNすると、元の値が読み込まれます。

(RE-RUNでは、私はMyTool.exeを呼び出すことにより、コマンドPROMT上でアプリケーションを実行している意味)

私は私の主な方法の初めに

ConfigurationManager.RefreshSection("appSettings"); 

を呼び出そうとしました。しかし、助けてくれなかった。

アドバイスをお願いしますか? おかげ

+0

IDE内のapp.configを編集するか、BIN/DEBUGフォルダのexe.configを直接編集しますか? – Steve

+0

デバッグフォルダにあります。 IDEにはありません。 – pencilCake

+0

IDE内のapp.configの出力ディレクトリにコピーするプロパティの値は何ですか? – Steve

答えて

29

しかし、私が編集して、いくつかのキー/値ペアの値とRE-RUN exeファイルを変更すると、それはまだ元の値を読み取ります。

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

これは、App.configが1回だけ読み取られ、解析されると言われています。アプリケーションが起動したとき。値はキャッシュされ、アプリケーションがある値を要求するたびに高価なXML解析が行われなくなります。

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

しかし、ConfigurationManager.RefreshSection("appSettings");メソッドが有効です。 AppName.exe.configファイルを変更したら、このメソッドを呼び出して、ConfigurationManager.AppSettings["someKey"];を使用して必要な値を再取得すると、新しい値が返されます。

+0

私は同意します。しかし、もし私が欲しいものを達成できなければどうでしょうか?出来ますか? (ベストプラクティスアドバイスの場合は+1) – pencilCake

+0

RE-RUNとは、MyTool.exeを呼び出してpromtコマンドを実行することです。 – pencilCake

+0

アプリケーションの実行中に誰がこのファイルを変更しますか?アプリケーション自体または他の外部プロセスですか? –

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

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

関連する問題