构建软件包时同时出现间歇性虚假 Delphi E2200 和 E2213:如何解决?

War*_* P 5 delphi packages compiler-errors delphi-xe2

错误E2200是可以预料的,如果你试图把同一单元X成两个不同的命名包,Y和Z.这不是预期时,包的名称是在左边和错误消息的右侧都相同。同样奇怪的是,上述虚假或令人困惑的 E2200 最常伴随着 E2213,即糟糕的封装单元格式。

我看到这种形式的间歇性编译器错误,这显然是为了警告用户他们将同一个单元放入两个不同的包中,但有时会发生这样的情况,它会在左侧和右侧以相同的包基名为您提供此消息,在下面的情况下,请注意 Jacob-Two-Two 错误消息。你不能把它放在 ZZLibD16 中,因为它已经在 ZZLibD16 中了。这个错误让包括我在内的用户感到困惑,但我已经见过很多次了,并且已经找到了解决方法。

[DCC Error] ZZLibD16.dpk(82): E2200 Package 'ZZLibD16' already contains unit 'ZZChartComboBox'
[DCC Error] ZZLibD16.dpk(83): E2200 Package 'ZZLibD16' already contains unit 'ZZComboBox'
[DCC Error] ZZLibD16.dpk(84): E2200 Package 'ZZLibD16' already contains unit 'ZZDBComboBox'
[DCC Error] ZZLibD16.dpk(85): E2200 Package 'ZZLibD16' already contains unit 'ZZDBGrid'
[DCC Error] ZZLibD16.dpk(86): E2200 Package 'ZZLibD16' already contains unit 'ZZQuery'
[DCC Error] ZZLibD16.dpk(87): E2200 Package 'ZZLibD16' already contains unit 'ZZTable'
[DCC Error] ZZLibD16.dpk(88): E2200 Package 'ZZLibD16' already contains unit  'ZZTrackBar'
[DCC Fatal Error] RSLibD16.dpk(308): E2213 Bad packaged unit format: ZZSomething.dcp.ZZUnitX - Expected version: 23.0, Windows Unicode(x86) Found version: 0.0, Unk(x86)
Run Code Online (Sandbox Code Playgroud)

我相信这种奇怪的“你不能把 X 放在 Y 中”的正常原因是一些“坏包卫生”的做法,我怀疑修复是什么,但我想知道是否有人研究过这个并且可以明确回答一个人应该做什么。

我通常尝试通过查找 DCP 文件的重复副本并清理重复或额外副本来解决它。我知道这个问题的那部分。我想知道的是,您是否可以采取一些措施来避免 IDE 损坏您的计算机并生成错误的 DCU?例如,我长期以来一直怀疑,通过避免让包和项目具有与其输入(搜索)和输出(DCU 输出和 DCP 输出)路径相同的任何路径,就可以避免这个问题。是这样吗?如果没有,有什么方法可以防止出现此类问题?您的项目搜索和库搜索路径中的哪些组织规则将避免此问题?

在某些情况下,以下就足够了:右键单击组中的每个项目并清理。现在再次构建,问题消失了一段时间,然后又回来了。在其他情况下,我要构建更复杂的包集,唯一可行的解​​决方法根本不是从 IDE 构建,而是从批处理文件的 msbuild 构建。在其他情况下,我发现将所有包从“根据需要重建”更改为“显式重建”会有所帮助。事实上,我无法理解或真正“解决”或预防问题,只能通过各种杂手来解决它。有没有大神懂的,谁能解释下这种包奇怪问题的原因和解决方法,包括“打包单元格式不好”?

在上面的问题中,我专门使用 Delphi XE2,但我认为类似的答案应该适用于大约 2010 年及以后的所有 Delphi 版本。

Vij*_*air -1

转到“C:\Users\Public\Documents\Embarcadero\Studio”,将文件夹“21.0”重命名为“21.0_”,然后重新启动 Delphi 并尝试一下