我的一般问题是如何解决“由于依赖项不会消失,无论我清理和重新编译多少次,我的 BPL 都不会加载”。 更新 您可能认为您有一个干净的重新编译系统,但由于 Windows 的逆向奇迹及其文件系统虚拟化错误功能,您没有。
当我尝试将我的设计时包(在本例中名为 dclFsTee.bpl
)加载到我的 Delphi IDE(它是快速报告 4 teechart 包装器组件包)中时,它会提示:
The program can't start because tee7100.bpl is missing from your computer. Try reinstalling ...
那个
tee7100.bpl
我所知道的系统上的任何 DCP 或 DCU 文件都没有引用。但很明显,出了点问题,我找不到问题所在。所有 Delphi 用户都面临着一百个 BPL“无法编译或无法加载”的问题。当被问及要做什么时,普遍的说法是清理您的计算机。
然而,我现在花了几个小时清理我的电脑,虽然一切都在编译文件,但显然一定有一些过时的东西隐藏在某个地方,因为我试图加载的结果 BPL 文件仍然想要加载一个版本的几天前我从这个系统中删除的 TeeChart BPL,以及我能找到的每一条痕迹。
我删除的 Delphi 2007 中 TeeChart 的痕迹包括 $(BDS)\Lib 和 $(BDS)\Lib\debug 文件夹中的所有内容,以及系统上的所有 DCP 和 BPL 文件夹。每个 TeeChart-unit-named dcu 文件也消失了。
一旦你走到了路的尽头,接下来你要尝试什么? (格式化硬盘,买新电脑。)说真的。我想我是个聪明人,但我有一个 1 TB 的硬盘驱动器,一个运行到 80 多个文件夹的库路径,以及一个似乎组织良好的源代码存储库,但显然有些东西隐藏在我无法做到的地方找到它。
我有 TeeChart Standard 2012,带有完整的源代码,据我所知,我的开发机器不再包含来自 delphi 附带的“tee chart tee7100.bpl”版本的任何旧的 TeeChart BPL 或 DCP 文件。
在向 tee.inc 文件写入 {$DEFINE x} 声明后,我已经运行了 teechart 附带的“recompile.exe”向导,它似乎只是运行 MSBuild 并构建包分布)。
然而,不知何故,似乎其中一个包的隐式导入之一正在绘制一些尚未重建的陈旧文件,因此尝试加载 tee7100.bpl。新的 bpl 名称是 tee911.bpl。
我没有问这个非常具体到 fastreport 的问题,我只是将它作为我在 Delphi 中开发时遇到过几十次的普遍伤害世界的一个具体实例。
我只提供了快速报告的详细信息,因此您可以看到这实际上是在处理具有依赖项的组件源代码或包或包集时有时在 Delphi IDE 中面临的一般问题的特定实例.清理您的计算机以便您的代码甚至可以构建可能会很棘手。
所以这是我的 Delphi 包到包依赖解析问题:
更新 经过几个小时的斗争,并使用我知道的每一个技巧,我意识到我没有checked for some
VirtualStore
related issues由 Windows 7 中的文件虚拟化引起。这意味着 Windows 7 依赖于在它上面运行的程序。它为您提供了另一个版本的文件,这不是您想要的。这在很多方面都是致命的;一;您重新编译了一个 BPL,但这不是加载的那个。杀死我的 BPL 位于作为 VirtualStore 一部分的 SysWow64 文件夹中。请注意,虚拟存储基本上会使幻影文件出现,只有当您是某个“低权限”程序时才会出现幻影文件,这显然是 Win7/64 位的 Delphi 2007。要删除当前用户帐户的 SysWow64 VIRTUALSTORE 文件夹中的 BPL 文件: del %HOMEPATH%\AppData\Local\VirtualStore\Windows\SysWow64\*.bpl
... 有时我只是讨厌 Windows 架构。无论如何,我不会将上述内容作为答案,因为我想知道是否有人有更好的方法或任何提示或建议,下次可能会有所帮助。
最佳答案
好的,没有其他人回答,所以我会把它放在这里对 future 的人有帮助:
-- 在清理损坏的系统时,请记住 Windows VirtualStore,这些系统上有旧版本的 DLL,包括 TeeChart、FastReport、Indy 等,这些系统往往会陷入困惑,因为它们可以作为“delphi 附带的开箱即用包”存在以及如果您直接从供应商处购买并安装它们,则经常作为升级版本安装,或者第三,您可能在公司的 mega-component-pack-目录中拥有自己的编译副本。
-- 当搜索重复的或过时的 BPL 时,在 Windows 中进行文件搜索不会在虚拟存储中查找,您必须手动为您的进程或用户或程序定位并清除整个虚拟存储区域。
这个问题的第二层是这样的:
FastReports 的依赖图很复杂:
C:\Windows\System32
中时发生的可怕事情。 (在 32 位系统上)和 C:\Windows\SysWow64
(64 位系统上的等效路径)。 关于delphi - 解决无法加载 BPL 但您已经重新编译的 Delphi BPL 包问题(Windows VirtualStore 文件系统问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12161554/