0

すべてのデータベースコードを別のライブラリに抽象化してから、そのライブラリをすべてのコードで使用しようとしています。すべてのデータベース接続は、appSettingsからの接続文字列を使用して、VS2005でデータセットをドラッグアンドドロップして作成した型付きTableAdaptersを使用して行われます。

私が解決できなかった問題は、.NetがライブラリappSettingsをそれを使用している他のプロジェクトに伝播しないことです。

つまり、MyProgram.Clientなどの他のプロジェクトで使用されるデータベースレイヤーライブラリMyProgram.DbLayerがあります。.Clientにすべてのデータセットがある場合、connectionStringはMyProgram.Client.exe.configにあります。ビルド後に変更できます。MyProgram.DbLayerに移動したとき、バイナリをビルドした後、その設定を使用できません。

編集:これは、ApplicationSettingsのより一般的な問題のようです。

私が気付いたのは、ライブラリでのみ使用される設定を手動で追加すると、正しく読み取られるということでした。今必要なのは、設定が.configファイルにも自動的に含まれるようにすることだけです。

4

2 に答える 2

1

AppSettings/ConnectionStrings は常に、現在実行中のアプリ プールから読み取られます。

これにより、次のことを意味します。

私が持っA.exeている場合は、クラスがありDAL.csます。DAL.cs は構成から接続文字列を読み取り、"abc"期待どおりに戻ります。

次に、DAL.cs を独自のプロジェクト、つまり独自のアセンブリに移動します。app.config から接続文字列を呼び出すこともできますが、実行中のアプリケーションでアセンブリを "ホスト" し、接続文字列をそのアプリケーションの app config に追加する必要があります。そのため、新しい app.config を作成し、その中で接続文字列を指定します"xyz"。実行すると、期待どおりに実行されます。

さて、A.exeプロジェクト内の参照を new を使用するように変更するDAL.dllと、どのような接続文字列になると思いますか? "xyz"? いいえ!"abc"のアプリケーション構成ファイルでまだ構成されているため、以前と同じように を使用しますA.exe

多くの WindowsおよびWeb アプリケーションで共有 DAL コードを使用したため、これが機能することはわかっています。

これが不明な場合、または問題が解決しない場合は、この回答にコメントしてお知らせください。

OPからの次のコメントを更新

「ホスト」とは、共通コードを呼び出すアプリケーションを意味します。これは Windows アプリケーションまたは Web アプリケーションであり、基本的にはアプリケーション コンテキストです。

共通コードを使用する各アプリケーションの構成ファイルにエントリを作成する必要があります。元の質問を誤解している場合(完全に可能です。長い一日でした!)、構成も集中化したい場合は、次のことを行う必要があります。

  • なんらかの形式の集中型ストレージ (XML、DB など) を作成します。
  • 共通コードを拡張してデフォルト値を設定し、集中ストレージに接続できるようにします。
  • そこから、構成ストア内の情報に基づいて、コード自体を構成できます。

お役に立てれば :)

于 2008-12-09T15:14:26.100 に答える
1

あなたの問題を正しく理解していれば、あなたが必要とするように思えます

1.) すべてのデータ アクセス呼び出しに共通のアプリケーション コンテキスト

また

2.) 構成設定にアクセスする別の方法

1: 単一のコンテキスト (IIS、Windows サービスなど) で実行されるサービス内にデータ レイヤーをラップします。

2: 提供されている構成管理メカニズムを使用しないでください。代わりに、特定の場所にあるプロパティ ファイルを使用してください。

ただし、構成設定はさまざまなレベルからカスケードすることを忘れないでください。たとえば... machine.config に設定を追加すると、そのマシンで実行されているすべてのアプリケーションは、下位レベルで置き換えられない限り、その設定を使用します...構成ファイル。

于 2008-12-09T15:22:29.717 に答える