0

他のクラスが接続する必要のある3つのデータベースの3つのエンティティモデルを含むクラスライブラリを作成しました。このクラスライブラリは、3つの異なるWebサービスと1つのWebサイトで使用されます。これらはすべて独自のサーバーにインストールされるため、同じ接続データを共有する簡単な方法はありません。

私のweb.configファイルには、次の行があります。

<connectionStrings configSource="Dependencies.ConnectionStrings.Config"/>

これにより、接続文字列が別のXMLファイルからロードされます。これは正常に機能しますが、このDependencies.ConnectionStrings.Configファイルの5つの異なるコピーがあることも意味します。開発中は単一のファイルを使用したいと思います。

ただし、私のソリューションには4つのセットアッププロジェクトも含まれており、これらのセットアップでは、構成ファイルが互いに隣接している必要があります。

では、web.configを変更せずに、複数のプロジェクト間で単一の構成ファイルを共有するようにVSに指示するにはどうすればよいですか?


もう少し複雑にするために、クラスライブラリはapp.configを使用して接続文字列を格納します。また、接続文字列を別の構成ファイルにリンクするようにapp.configに指示することはできません。さらに複雑なのは、インストール後にシステム管理者が接続文字列を変更する必要があることです。これは、開発データベースとは別のデータベースを探す必要があるためです。(実際、開発中は、3つのデータベースを使用してエンティティロジックを分割します。テスト環境と本番環境では、1つのデータベースのみを使用します。)
私の現在の解決策は単純です。Dependencies.ConnectionStrings.Configファイルをソリューションの別のフォルダーに追加し、これを他のプロジェクトに定期的にドラッグアンドドロップして更新しました。これは機能しますが、エラーが発生しやすくなります...

4

2 に答える 2

1

大きな問題は、現在のメイン構成ファイルの上のフォルダー階層にリンクされた構成ファイルを含めることができないため、それらを共有することが困難になることです。

これを構成階層の上位のどこかに配置することを検討しましたか?おそらくルートweb.configまたはmachine.configにありますか?

もう1つのオプションは、いくつかのビルド前イベントでこれらのファイルをビルドすることです。これにより、ファイルの複数のコピーがあることを心配する必要がなくなります。開発者ごとに異なる接続文字列を作成する必要がある場合は、prebuildオプションを非常にうまく使用しました。

于 2009-07-03T07:56:21.103 に答える
1

ファイルを変更せずに、あなたが求めていることを実行できるかどうかはわかりません。

すべてのサーバーで使用できるファイルが1つあれば、バージョン管理の問題などが発生しない方がはるかに良いと思います。

正直なところ、セットアップ全体はかなり複雑に聞こえ、間違った構成ファイルが間違ったサーバーに配置されたと言った場合、おそらくエラーが発生しやすくなります。

接続情報を共有データベースに一元化したいと思うでしょう。各サーバーが使用することになっている接続文字列を記録できます(サーバー名に対して保存されます)。このようにして、各サーバーは使用する接続文字列を認識します。もちろん、これは、サーバーがすべて1つの中央データベースサーバーに接続できることを前提としています(セットアップによって異なります)。

もちろん、望ましい結果を得る方法は他にもありますが、組み込みのアプリ設定を曲げてやりたいことをやろうとするのではなく、「自分でロール」すると、はるかに洗練されたソリューションが得られると思います。

于 2009-07-03T07:56:52.367 に答える