"无法加载包A,它包含单元X,它也包含在包B中"

Jam*_*amo 13 delphi packages custom-component

(更多包/组件为我安装乐趣 - 感谢大家为您提供的所有帮助).

我在Delphi 2007中将错误列为标题.包A是我的基于框架的"查看器面板"包.包B是含有几个组件,这些组件用于显示关于链接到数据库gven(它们的SQL,状态,类型,等),其中之一是一个非可视组件数据集的信息的包(我们将称之为Inspector)创建并调用显示该信息的表单.单位X是该表格的单位.

我加入了督察组分在包我的观众面板之一,但此后删除了它,并不能找到在查看源代码,为项目的任何引用,也不在基于帧的查看器面板的单位我把它添加到.引用隐藏在哪里?

另外,将Inspector组件添加到其中一个视图面板框架(也作为已注册的组件安装)会导致此问题?

这可能与之前的问题这个问题有关,但我决定从这个特定的symtpom /问题开始,只是为了保持简洁明了,希望以后对其他人有用.在此先感谢您的帮助.


更新:

感谢Loren,我能够找到并删除仍然存在并导致问题的USES引用.但是,我仍然不清楚如何完成我想要完成的任务.:\这是最新的:

Inspector是一个简单的非可视组件,它包含一个DataSet属性和一个内部"Info Form".调用ShowInfo方法会创建表单,并使用与链接的DataSet相关的各种信息填充该表单.我想用它来调试驱动观众的SQL.

如上所述,Inspector包含在包B中.查看器位于包A中.我想在某些TFrame后代(注册为真正的调色板组件)上使用Inspector组件.当我将该组件放在给定的TFrame上然后使用它,并编译/安装包A时,我得到"无法加载包A,它包含单元X,它也包含在包B中"错误.它现在显然是原因,我可以按需重新创建问题.

moobaa的建议在下面是有道理的,但似乎即使我试图做他所建议的方法#2,它也行不通.我错过了什么?看起来这应该是可行的,事实上,似乎我见过的大多数软件包一直使用其他已安装的软件包(包括VCL本身).

注意:据我所知,包B不依赖于包A(我已经单独安装它,所以这似乎同意).

(顺便说一句,是否有任何工具来"规划"这样的包依赖?我正在使用D2007)

一如既往,感谢您的时间和帮助.

moo*_*baa 8

它也可能与这个问题有关.

单元X显然与两个包都链接在一起.有几种方法可以解决这个问题:

  • 使用Unit X(以及任何其他依赖项)创建一个新包(我们将其称为包C),然后将包A和包B更改为使用包C; 要么...
  • 包括包B中的单元X,并且包A使用包B(这是第一种解决方案的更紧凑形式).

如果在包B代码中明确提到了查看器,那么包B肯定应该使用包A(,那里应该存在显式依赖).如果未明确指出共享代码的指示,B会将其自己的代码版本编译为B,从而导致您遇到的问题.

现在,如果该依赖项是正常的,则从包B添加对包A的引用应立即清除此问题; 毕竟,B将"使用"包A中的代码,并且相同的单元将不会被编译成两个包.但是,如果这引入了循环引用(我不记得A是否使用B),那么您可能需要进行一些重构:}


Lor*_*tel 4

仅仅因为您删除了组件并不意味着您从 USES 子句中删除了模块名称 - 这些名称不会自动删除。