2009-07-28 6 views
10

(もっとパッケージ/コンポーネントが楽しいです。"パッケージAを読み込めません。パッケージBにも含まれているユニットXが含まれています"

Delphi 2007では、タイトルとしてエラーが表示されています。パッケージAは、フレームベースの「ビューアパネル」のパッケージです。パッケージBは、gvenデータベースにリンクされているデータセット(そのSQL、状態、クラスのタイプなど)に関する情報を表示するために使用されるいくつかのコンポーネントを含むパッケージです。そのうちの1つは非ビジュアルコンポーネントですインスペクタ)を作成し、その情報を示すフォームを呼び出します。単位Xは、その形式の単位です。

InspectorコンポーネントをPackageのビューアパネルの1つに追加しましたが、削除してからプロジェクトのView Sourceやフレームベースのビューアパネルのユニットで参照が見つかりませんでしたそれをに追加しました。参照隠蔽はどこにありますか?

また、インスペクタコンポーネントをビューパネルフレームの1つ(これも登録コンポーネントとしてインストールされる)に追加すると、この問題が発生しますか?

これはおそらくthis previous questionthis oneに関連していますが、私はこの特定のsymtpom/issueで新しく始めて、それを簡潔かつ明確に保つことにしました。すべてのヘルプに事前に感謝します。


更新:ローレンへ

おかげで、私は残っUSES参照を見つけて削除することができたし、問題を引き起こしていました。しかし、私は達成しようとしていることを達成する方法についてまだ明確ではありません。 :\ここに最新の情報があります。

Inspectorは、DataSetプロパティと内部の "Info Form"を含む単純な非ビジュアルコンポーネントです。 ShowInfoメソッドを呼び出すと、フォームが作成され、リンクされたDataSetに関連するさまざまな情報が入力されます。私はそれを使用してビューアを駆動するSQLをデバッグしたいと思っています。

上記のように、インスペクタはパッケージBに含まれています。ビューアはパッケージAに含まれています。TFrameの子孫の一部(真のパレットコンポーネントとして登録)でInspectorコンポーネントを使用します。しかし、私はそれを使用するために、特定のTFrameにそのコンポーネントをドロップし、パッケージAをコンパイル/インストールすると、 "パッケージAをロードできません、パッケージBに含まれているユニットXも含まれています"というエラーが出ます。それは今や明らかに原因であり、私は要求に応じて問題を再現することができます。

以下のmoobaaの提案は意味がありますが、と思われますが、彼が提案したアプローチ#2を実行しようとしていても機能しません。私は何が欠けていますか?これは実行可能でなければならないようですが、実際には、他のインストールされているパッケージ(VCL自体も含まれています)を常時使用しているパッケージのようです。

注:パッケージBは、パッケージAには依存しません(私はそれをインストールしましたので、それは同意するようです)。

(ところで、?私はD2007を使用しています。このようなパッケージの依存関係を「アウトチャート」にする任意のツールがあります)

いつものように、あなたの時間と助けに感謝します。

+0

あなたのケースでパッケージA&Bとは何ですか?私は同じエラーが表示されます:パッケージ 'Abbrevia160'を読み込めません。ユニット 'AbDfBase'も含まれています。これはパッケージ 'Abbrevia'にも含まれています。 AbbreviaとAbbrevia160はまったく同じパッケージです。 160は単なるサフィックスです...アイデアはありますか? – ple103

答えて

3

単にコンポーネントを削除しても、 USES句のモジュール名 - 自動削除されません。

7

また、this questionに関連している可能性があります。

ユニットXは明らかに両方のパッケージにリンクされています。

  • ユニットX(およびその他の依存関係)を使用して新しいパッケージ(パッケージCと呼ぶ)を作成し、パッケージCとパッケージBを両方とも変更してパッケージCを使用するように変更します。または...
  • は、パッケージBのユニットXを含み、パッケージAはパッケージBを使用します(これは最初のソリューションのよりコンパクトな形式です)。

視聴者が明示的にあなたのパッケージBのコードに記載されている場合は、[パッケージBが最も確かにパッケージA使用する必要があります(すなわちを、そこに明示的な依存関係があるはずです)。その共有コードの表示が明示的に行われていない場合、Bは自分自身のバージョンのコードをBにコンパイルし、表示している問題につながります。

この依存関係が問題ない場合は、パッケージBからパッケージAへの参照を追加するとすぐにこの問題が解決されます。結局のところ、BはパッケージAのコードを「使用」し、同じユニットは2つのパッケージにコンパイルされません。しかし、これにより循環参照が導入された場合(AがBを使用するかどうかは覚えていません)、リファクタリングを行うことができます:}

+0

ありがとうございます。私は、ユニットXがこの時点でAにリンクされる方法(インスペクタのコンポーネント参照を一見して削除した後)をどのように/どこで見つけ出すのか分かりません。どのようにそれをフェレットするための任意の提案?再度、感謝します。 – Jamo

+0

ユニット名のgrep検索を試してください - Lorenが述べたように、uses節のすべての参照が自動的に削除されるわけではありません。また、すべてのdcu&dcpファイル(Marcoの説明どおり)を削除してから、すべてを再構築してください。 – moobaa

+0

moobaa - ありがとう。私は、より具体的な原因/効果の症状を伴う質問を更新しました。追加の思考や洞察があれば、大いに感謝します。これまでのあなたの提案のためにmcuhありがとう! – Jamo

0

Loren:.dpkなので、句を必要とするため、afaikパッケージを使用できません。

私は単に$(BDSDIR)/プロジェクト/ディレクトリをクリーンアップしたい、私自身のプロジェクトdirがBにあったユニットのB.dcpとすべてのDCUのを削除し、A.

もう一つを再構築しますBに依存して登録されたコンポーネントがあるかどうかを確認してください。

+0

インスペクタ自体に依存するコンポーネントがあります。しかし、私はこの時点でAのBへの直接的な参照(単位での使用、またはプロジェクトファイルでの使用)を見ていません。チェックする場所は他にありますか?私はdcpのアドバイスを試してみます。 – Jamo

+0

私が意味していたことは、ユニットが、彼が欲しくないものを持ってきているユーズによって引っ張られていたということでした。 –

関連する問題