Delphi 10.4 包:"Add getit. getit contains implicit unit(s) %s."

Delphi 10.4 Packages: "Add getit. getit contains implicit unit(s) %s."

我正在尝试在 Delphi 10.4.

中安装软件包

当我尝试构建其中一个包时,我看到了熟悉的警告对话框,提示 Delphi 需要做一些事情 :

通常我们不关心这个对话框。

除了在这种情况下,它是一个真正的痛苦

这次说要加getit.:

Add getit.
getit contains implicit unit(s) Exceptions.

所以我认为,“随便。我不在乎你需要工作什么;只是工作。”。并将其添加到我的包中:

当然,10 年前的代码单元不可能使用 10.4 的 Getit。我什至没有 10.4,直到 Borland 几天前强迫我使用它)。但是如果 Delphi 说它需要对包裹做些什么:我们让它去做。

除了他们所做的不起作用。

那么我如何获得对getit的依赖。我如何阻止 Delphi 坚持它需要 getit 任何东西?

We don't know what they mean

那么我建议你学习,因为这是了解包如何工作的非常重要的东西。

there's no way a code unit from 10 years ago is using Getit of 10.4

没错。但它可能确实引用了在您的项目中找不到但在 Getit 包中找到的内容。每 https://en.delphipraxis.net/topic/3646-delphi-1041-upgrade:

When a unit is referenced by a package that is not contained in that package, it looks for other installed packages for this unit. In this case it found one in the getit package.

That is standard behavior since ages. Try compiling a package that uses VCL.Controls without mentioning anything in the requires clause. Delphi will suggest to add vcl.

因此,为了避免 IDE 想要添加 getit 包,您需要添加对包含 IDE 正在搜索的单元的正确包的引用(在这种情况下,引用具有 Exceptions 单元的包)。

Borland forced it upon me a few days ago

Borland 自 2008 年以来一直退出开发人员工具市场,当时他们将工具出售给 Embarcadero。而且他们没有强制你升级,你选择

问题是 getit.dcp 使用了一个名为 Exceptions 的内部单位。

Delphi10.4 不包含此单元;它只是 getit.dcp.

内部的一个秘密单位

您认为编译器会继续在 getit.dcp 内部查找它需要的 Exceptions 单元。

相反,偶然发现一些完全不相关的东西似乎很高兴碰巧有相同的名字。

  • 理想情况下,编译器会知道只在它知道的位置查找它需要的东西
  • 而不是捡起地上的口香糖开始咀嚼

所以解决方案是:

  • 将我单位的名称从 Exceptions.pas
  • 更改为
  • Contoso.Exceptions.pas