9

実行時にアプリケーション app.config を切り替える方法はありますか (current.config から new.config、ファイルごとに)。独自の application.exe.config ファイルを置き換える必要があるバックアップ/復元プロセスがあります。この投稿を見ましたが、実行時にこれを行う方法には答えていません。

4

5 に答える 5

5

Microsoft .NETapp.configは、他の多くのシナリオと同様に、あなたのシナリオに合わせて設計されていません。私も同様のニーズによく遭遇するため、ソリューションの設計に多大な労力を費やしてきました。

  1. 構成のブートストラップとしてのみ使用するように再設計しapp.configます。残りの実際の構成データを見つける場所を指定します。この情報はほとんど変更されないため、ファイルの監視やアプリケーションの再起動を処理する必要はありません。

  2. 実際の構成データの別の場所 (ファイル、データベース、場合によっては Web サービスなど) を選択します。ほとんどの場合、データベースを好むので、データを格納できる単純な構造の構成テーブルを作成します。

  3. 単純なライブラリを実装して構成アクセスをラップし、アプリケーションの残りの部分に単純な API を使用できるようにします (依存性注入を使用)。app.config実際の構成ストレージの場所と同様に、使用状況を非表示にします。.NET は厳密に型指定されているため、構成設定を次のようにします。取得した各文字列を使用可能な最も具体的な型 (URL、Int32、FileInfo など) に変換します。

  4. 実行時に安全に変更できる構成設定とそうでない構成設定を判別します。通常、一部の設定は他の設定と一緒に変更する必要があります。または、変更を許可してもまったく意味がありません。すべての構成データが実行時に安全に変更できる場合、それは簡単になりますが、私はそのようなシナリオを非常に疑っています. 構成設定の変更可能性と相互依存性を可能な限り隠します。

  5. 実際の構成データが利用できない場合の対応を設計します。使用可能なデフォルトを特定できない限り、構成設定がないことをアプリケーションを中止する致命的なエラーとして扱うことを好みます。同様に、構成ストレージ コンテナー (ファイル、データベース テーブルなど) がない場合は中断します。

お楽しみください。

于 2009-01-12T23:56:20.297 に答える
2

ファイルを切り替える必要があることを検出したときに、アプリケーションを再起動できますか? その場合は、ファイルを切り替えて再起動するだけです。ここで注意が必要なのは、プログラムの実行中に .NET が app.config ファイルを開いたままにする場合です。そうではないと思いますが、最も明白なアプローチが失敗した場合は、コマンドラインで指定された PID を持つプロセスが終了するのを待ってから、構成ファイルを切り替えて再起動する 2 つ目のアプリケーション (cfgswitcher.exe) を用意することをお勧めします。オリジナルのプロセス。その後、アプリは cfgswitcher.exe を起動し (コマンド ライン引数として独自の PID を渡します)、終了するだけです。

私が言うように、最初にもっと明白なアプローチを試す価値があります。

編集: アプリケーションを再起動できない場合 (または新しい AppDomain でその一部を再起動できない場合)、app.config のさまざまな側面 (アセンブリ バインディングなど) を変更することはできません。独自の構成セクションの変更のみに関心がある場合は、それらを別の構成ファイルに保存し、必要なときにいつでも再ロードすることをお勧めします。

于 2009-01-12T19:40:23.090 に答える
0

ApplicationSettingsBase クラスで利用できるイベントを見てください。必要なものを提供する PropertyChanged と SettingChanging があります。

ファイルを監視し、変更されている場合は reload メソッドを呼び出して新しい設定を取得することもできます。

于 2009-01-12T19:55:51.030 に答える
0

再起動せずに実行時に構成を切り替えることはまったくできないと思うので、Jon のアプローチを適用できない場合は、別のアプローチを考え出す必要があります。

とにかく、あなたのシナリオについて十分な情報を持っていないのは私だけかもしれませんが、このようなものは怪しいと感じています.

構成ファイルを交換することが、満たす必要のある要件を達成するための最良の方法であると確信していますか? つまり、これは非常に珍しいことです。私があなたなら、他のアプローチを考え出すでしょう。

于 2009-01-12T19:55:52.887 に答える