delphi - "Cannot load package A, it contains unit X, which is also contained in package B"

标签 delphi package custom-component

(更多软件包/组件安装对我来说很有趣——感谢大家迄今为止提供的所有帮助)。

我在 Delphi 2007 中收到如标题所示的错误。包 A 是我的基于框架的“查看器面板”包。包 B 是一个包含几个组件的包,这些组件用于显示链接到 gven 数据库的数据集的信息(它们的 SQL、状态、类类型等),其中一个是非可视组件(我们将其称为检查器)创建并调用显示该信息的表单。单位 X 是该形式的单位。

我将检查器组件添加到了 Package 中的一个查看器面板中,但后来将其删除,并且在项目的“查看源代码”中找不到对它的任何引用,也无法在我添加的基于帧的查看器面板的单元中找到任何对它的引用它到。引用隐藏在哪里?

此外,将该检查器组件添加到 View 面板框架之一(也作为注册组件安装)会导致此问题吗?

这可能与 this previous question 有关和this one同样,但我决定从这个特定的症状/问题开始,只是为了保持简洁和清晰,并希望以后对其他人有用。预先感谢您的任何和所有帮助。

<小时/>

更新:

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

检查器是一个简单的非可视组件,它包含一个数据集属性和一个内部“信息表单”。调用 ShowInfo 方法会创建表单,并使用与链接的 DataSet 相关的各种信息填充该表单。我想用它来调试驱动查看器的 SQL。

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

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

注意:据我所知,包 B 不依赖于包 A(而且我已经独立安装了它,所以这似乎是一致的)。

(顺便说一句,有没有任何工具可以像这样“绘制”包依赖关系?我正在使用 D2007)

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

最佳答案

它也可能与 this question 有关.

Unit X 显然已链接到这两个包中。有几种方法可以解决这个问题:

  • 使用单元 X(以及任何其他依赖项)创建一个新包(我们将其称为包 C),然后将包 A 和包 B 更改为都使用包 C;或者...
  • 将单元 X 包含在包 B 中,并让包 A 使用包 B(这是第一个解决方案的更紧凑形式)。
<小时/>

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

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

关于delphi - "Cannot load package A, it contains unit X, which is also contained in package B",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1191602/

相关文章:

javascript - 使用javascript在自定义元素中设置主机样式

service - 如何获取 Linux 上的基本包安装位置?

r - 在 R 中开发包时清除以前版本的函数

r - 在 R 包中找不到函数?

ios - 创建自定义类型的 SKSpriteNode

delphi - JEDI JCL 压缩库无法打开跨区存档文件

delphi - Delphi 2009 中的 dfm 中添加的 DoubleBuffered 属性在 Delphi 2007 中不存在

delphi - 接口(interface)对象从内存中转储

php - 使用 Delphi 进行数据库连接和选择(FIREMONKEY - iOS)

typescript - 自定义组件未显示在 Ionic v4 + Angular 6 中