9


1

複数の構成ファイルインスタンスを処理する最良の方法は?

C#.NET 3.5で記述された複雑なシステムを実行し、20以上のWebサイト、10以上のWindowsサービス、さまざまなスケジュールされたタスクおよびヘルパーアプリで構成されています。

これらはそれぞれ、1つまたは複数のフレームワークおよびビジネスロジックDLLにバンドルされています。 これらのDLLには広範な構成設定があり、これが悪夢に変わり、同じクラスライブラリの複数のインスタンスに対して40以上の構成ファイルを維持しています。

さまざまな理由でDLLをGACに登録しません。1)システム全体を再構築したり、不必要なダウンタイムを引き起こしたりせずに、選択したプロジェクトに変更をすばやく展開できる柔軟性が気に入っています。 2)DLLの一部のインスタンスには、わずかに異なる設定が必要です。たとえば、一部のプロジェクトでは、異なる接続文字列、通知電子メールアドレスなどが使用されます。

Web.config / App.configのAppSettingsファイル/ configSource属性を試しましたが、これらはプロジェクト間ではなく相対パスでのみ機能します。 machine.configにデフォルトを保存することを検討しましたが、これはミッションであり、煩雑すぎてプロジェクトに関係のない重要なものがいっぱいです。

現在の「解決策」は、独自の構成ファイル形式を使用することです。これは、最初に現在のプロジェクトの「bin」フォルダー内の構成をチェックし、存在しない場合はハードコードされた中央の場所からロードします。 これにより、必要に応じて設定をオーバーライドできますが、それ以外はデフォルト設定を使用します。

最終的には、各クラスライブラリのデフォルト設定を中央の場所に配置し、各インスタンスにデフォルトとは異なる設定のみをオーバーライドするオプションの構成ファイルを含めることができます。

この問題を解決するための業界標準の推奨方法はありますか .NET ?

3 Answer


2


これがすべて同じ企業内にある場合、構成をデータベースに保存するだけではどうですか? Enterprise Frameworkには、これを行うためにプラグインできるアダプターもあると思います。

私たちの会社では、webfarmsで実行しているサイトがあるため、構成をdbに保存し、何かを変更する必要がある場合は、dbスクリプトで構成を更新します。 サイトにプッシュする必要はありません。サイトを再起動するか、web.configをタップしてリロードを強制するだけです。

他のアイテムに対する別のソリューションは、キーと値のペアを格納するデータベースを他のタイプの構成データとともに使用することで、同じコンポーネントを使用するWebサイト/ Windowsフォームプロジェクト全体で簡単に変更できます。

だから私が言っているのは、それらがすべて同じ会社/影響範囲内にあり、それらの中心にあるデータベースを使用することができれば、すべてDBを使用するだけだと思います。

レジストリを汚染しないでください。


0


OpenExeConfiguration(http://msdn.microsoft.com/en-us/library/ms224437.aspx)を使用し、各app / dllで2つの構成を開きます。1つ目はデフォルトで、2つ目はオーバーライドです。

その「中央」の場所をデフォルトのままにして、すべてのアプリへの読み取りアクセスを許可し、ローカル構成をアプリの近くに配置することができます。


0


これらのWebサイトとアプリケーションをどのようにデプロイしましたか?システム内のこれらのモジュールは同じマシンで実行されていましたか?これらのモジュールは特定のディレクトリからDLLを呼び出していましたか?

同じマシンで構成ファイルを使用できる場合、サーバーファームで以前にJoshuaが作成したデータベースが必要になる場合があります。

一部の構成セクションを共通の構成ファイルにオーバーライドする必要がある場合は、最初に中央の場所からデフォルトをロードし、各プロジェクトに特定の構成をロードしてから、ランタイムで構成オブジェクトを変更します。