次を使用して、Googleで回答を検索しました。
「タイプ 'Microsoft.SqlServer.Management.Smo.Server' は、参照されていないアセンブリで定義されています。」
DAL で Microsoft Sql Server Management Objects (SMO) を使用すると、参照されるプロジェクトで SMO dll への参照が必要になるのはなぜですか?
参照プロジェクトでの sql smo の使用
階層化されたソリューションでの sql smo
SQL SMO 参照要件
おそらく他にもいくつかあり、この問題の解決策や説明は見つかりませんでした。
確かに、私はジャーニーマン グーグルなので、もし誰かが私をパワーレベルアップして既存のリソースへの道を示したいと思ったら、喜んでそこから探検に行きます。
これが私のセットアップです:
DAL、ビジネス ロジック、サービス、UI という階層化されたソリューションがあります。サービスをホストする hosts プロジェクトがあります。私は実際に VS2010 拡張機能layerguidance.codeplex.comを使用しています。これは非常に優れており、これらすべてのプロジェクトをセットアップしています。SQL Server 2008 Express と SMO v 10 を使用しています。すべてのソリューション プロジェクトは、プロジェクト参照を使用して参照されます。すべてのプロジェクトは、共通の最上位の Bin フォルダーにコンパイルされます。
今問題:
DAL のクラスの中には、SmoTasks
SMO オブジェクトとのインターフェイスを処理するクラスと、パラメーターに SMO オブジェクトを必要とせずに関数Utilities
から抽象化してその関数へのアクセスを提供するクラスがあるため、参照プロジェクト (読み取り: ビジネス ロジック レイヤー) は、SmoTasks
非 SMO タイプ。DAL ではすべて問題なく、コンパイルも問題なく行われ、メソッドはテストに合格しています。私の世界での位置については満足しています。次に、BLL には、Utilities
クラスを使用してサービスを介して公開されるアプリケーションのデータベース構成を実行するコンポーネントがあります。BLL は DAL へのプロジェクト参照を使用し、期待どおりに DAL クラス (インテリセンス) を認識します。ただし、コンパイルすると、次のようになります。
タイプ 'Microsoft.SqlServer.Management.Smo.Server' は、参照されていないアセンブリで定義されています。アセンブリ 'Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' への参照を追加する必要があります。
BLL のコードは次のようになります。
public bool CreateTables(string connectionString)
{
bool result = default(bool);
// Data access component declarations.
Utilities utilities = new Utilities();
// Step 1 - Calling CreateTables on Utilities.
result = utilities.CreateTables(connectionString);
return result;
}
エラーが指す行は次のとおりです。
result = utilities.CreateTables(connectionString);
もちろん、SMO 参照を BLL に追加すれば、BLL は問題なく動作しますが、それは疎結合プロジェクトという私の設計目標に反します。SMO アセンブリを BLL に追加すると、コンパイルされ、サービス層で BLL オブジェクトを参照しても問題は発生しません。私の質問は、なぜですか?より具体的には、DALのクラスが既に SMO 型を抽象化しているのに、BLL が SMO への参照を必要とするのはなぜですか?Utilities
私が欲しいのは、DAL でのライブに関連するすべてのデータベース (duh) と、BLL のビジネス ロジックのみ (double duh) です。 私が見落としていた SMO を使用してこれを達成する別の方法はありますか?
貴重なお時間とご回答ありがとうございます。返信をお待ちしております。
編集: Chris の提案に基づいてソリューションを調整し、プロジェクト参照 (私) を使用していることを確認し、Muse.VSExtensions を使用して DAL 内の SMO への参照を再追加し、GAC 参照を追加しました。手動で追加してから、それらのアセンブリが存在することを二重に確認するために、それらのアセンブリに対して Copy Local = True を設定しました...しかし、私はまだこの厄介なコンパイルエラーに悩まされています。