Delphi 子包中的包与自身冲突

Delphi package conflicts with itself in a subpackage

我继承了一个 Delphi 项目,其中大部分事情都是在单独的 Git 存储库(git 子模块)中存在的包中完成的。如果没有子包(git sub-submodules)就不会那么糟糕了。

最糟糕的是,一个git子模块被主项目使用,并作为子模块的子模块:

MainProject -> Submodule1
MainProject -> Submodule2 -> Submodule1
MainProject -> Submodule3 -> Submodule1

现在我在 Submodule1 中的三个单元之间发生了名称冲突。

我能做什么?我怎样才能让 Delphi 忽略子包中存在的单元并使其仅使用第一个嵌套级别的单元?

没有"subpackages"。每个包都是一个单独的包。但我们假设您有以下设置:

  • 包1
    • unit1A
    • unit1B
    • 单元1C
  • 包2
    • unit2A 使用 unit1A
    • unit2B 使用 unitX
  • 包3
    • unit3A 使用 unit1B
    • unit3B 使用 unitX

如果unit2Aunit2Bunit3Aunit3B中的任何一个需要使用package1中的一个单位,那么package 应该在 package2package3requires 部分,但单位 unit1Aunit1Bunit1C 不应该在这些包的contains部分,也不应该默默地包含它们——如果发生这种情况,你会收到一条消息。

在上面的设置中,如果 unitX 不在 package1package2requires 部分的包中,它会被静默包含。如果这种情况发生在多个包中,则说明存在命名冲突。因此,您要么将其包含在 package2 中,也需要 package3 中的 package2,或者将其放入自己的包中。

所以无论你做什么:

  • 每件(姑且称之为A)一次只能装在一个包裹里.
  • 如果另一个单元(比如 Z)需要使用它 (A),则该单元 (Z) 的包必须 reference(在 requires 部分) 包含单元 A 的 程序包 不应直接包含单元 A

如果仍然存在命名冲突,请重命名单位,直到每个名称都是唯一的。