21

独自のアセンブリにパッケージ化された複数の基本コンポーネント (データベースの読み取り、プロトコル ハンドラーなど) で構築された大規模な複合アプリケーションを想定します。一部の展開では、これには 20 を超えるアセンブリが含まれる場合があります。これらの各アセンブリには、設定または構成情報があります。私たちのチームは、VS 設定エディター (およびそれが生成する使いやすいコード) を好む傾向があり、アプリケーションとユーザーの区別が私たちのニーズのほとんどを満たしています。

しかし....

多くの構成セクションをアプリケーションの .xml にコピー & ペーストするのは非常に面倒です。さらに、アプリケーション間で同様の構成を持つ傾向がある共有コンポーネントの場合、これは、複数の .config ファイルで重複した設定を維持する必要があることを意味します。

Microsoft の EntLib は、外部ツールを使用してモンスターの .config ファイルを生成することでこの問題を解決しますが、これも扱いにくいように感じます。

複数の共有アセンブリからのセクションを含む大きな .NET .config ファイルを管理するには、どのような手法を使用しますか? ある種のインクルードメカニズム?カスタム構成リーダー?

ファローアップ:

ウィルの答えはまさに私が得ていたものであり、フラットなキーと値のペアのセクションではエレガントに見えます。このアプローチをカスタム構成セクションと組み合わせる方法はありますか?

ビルド ターゲットごとに異なる .config を管理することについての提案にも感謝します。それもかなり役に立ちます。

デイブ

4

5 に答える 5

20

他の構成ファイルを指す 1 つのマスター構成ファイルを使用します。 これを行う方法の例を次に示します。


リンクが壊れた場合に備えて、特定の構成セクションのconfigSourceを指定します。これにより、その特定のセクションを別のファイル内で定義できます。

<pages configSource="pages.config"/>

<pages />これは、ノード ツリー全体を含む同じディレクトリ内に「pages.config」というファイルがあることを意味します。

于 2008-09-18T01:43:15.903 に答える
9

プロジェクトを右クリックして [アンロード] をクリックすると、[編集] という新しいメニュー オプションがポップアップ表示されます。それを選択すると、プロジェクト ファイルが開き、編集できるようになります。「AfterBuild」と呼ばれるコメント アウトされたセクションが見つかるまで下にスクロールします。

次に、次のようなものを追加できます。

<Target Name="AfterBuild">
    <Delete Files="$(TargetDir)$(TargetFileName).config" />
    <Copy SourceFiles="$(ProjectDir)$(Configuration).config" DestinationFiles="$(TargetDir)$(TargetFileName).config" />
</Target>

これにより、アプリケーション構成が [Release|Debug]app.exe.config という名前の構成に置き換えられます。そのため、プロジェクトの構築方法に応じて個別の構成を維持できます。

しかし、簡単で汚れたオプション (msbuild を使用したくない場合) は、個別の構成ファイルを維持してから、次のように含めるファイルを定義することです。

<appSettings configSource="Config\appSettingsDebug.config"/>
<roleManager configSource="Config\roleManagerDebug.config"/>

また、asp.net アプリケーションを実行している場合、Microsoft は、これらすべてを簡単に管理できる「Web 配置プロジェクト」と呼ばれる優れたユーティリティを提供しています。ここをクリックしてください。

于 2008-09-18T04:46:40.410 に答える
4

大量の構成セットを管理する優れた方法は、カスタム構成セクションを作成することです。Phil Haack は、この記事でこれについて非常にうまく説明しています 3 つの簡単なステップでのカスタム構成セクション

于 2008-09-18T02:57:52.603 に答える
2

展開/テスト環境ごとにビルド構成をセットアップし、各ビルド構成に基づいて個別の構成ファイルを使用します。

ScottGu にはこれに関する素晴らしい投稿があり、うまく機能します。唯一の癖は、構成ファイル (web.config) がコピーできるように、各ビルドの前に TFS から編集用にチェックアウトされていることを確認する必要があることです。

于 2008-09-18T07:19:48.637 に答える
1

ConfigurationManager のように機能する AssemblySettingsConfig クラスを作成しましたが、個々のアセンブリごとに .config を読み込みます。したがって、アプリケーションには .config があり、アプリケーションが参照するすべての DLL には独自の .config ファイルがあります。これまでのところうまくいきました。

于 2008-09-18T02:36:26.993 に答える