我的一般问题是如何解决“我的 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 命名的 dcu 文件也都消失了。
一旦你走到了路的尽头,接下来你会尝试什么?(格式化硬盘,买新电脑。)认真的。我认为我是个聪明人,但我有一个 1 tb 的硬盘驱动器,一个运行到 80 多个文件夹的库路径,以及一个看起来组织良好的源代码存储库,但显然有些东西隐藏在我无法做到的地方找到它。
我有 TeeChart Standard 2012,带有完整的源代码,据我所知,我的开发机器不再包含 delphi 附带的“tee chart tee7100.bpl”版本中的任何旧 TeeChart BPL 或 DCP 文件。
我已经运行了 teechart 附带的“recompile.exe”向导,在向 tee.inc 文件写入 {$DEFINE x} 声明后,它似乎只是运行 MSBuild 并构建包(源代码中有两个)分配)。
然而,不知何故,似乎其中一个包的隐式导入之一正在绘制一些尚未重建的陈旧文件,因此它试图加载 tee7100.bpl。新的 bpl 名称是 tee911.bpl。
我没有提出关于fastreport 的非常具体的问题,我只是将它作为我在Delphi 开发时遇到过数十次的一般伤害世界的一个具体实例来提及。
我只提供快速报告的详细信息,因此您可以看到这实际上是一个一般问题的特定实例,在处理具有依赖关系的组件源代码或包或包集时,有时在 Delphi IDE 中会面临这个问题. 清理您的计算机,以便您的代码甚至构建都可能很棘手。
所以这是我的 Delphi package-to-package-dependency-resolution 问题:
查找或跟踪一些不再需要的 BPL 问题的隐式加载的最有效方法是什么,以便我的代码(构建和编译得很好!)实际上将加载到 Delphi IDE 中。运行 Recompile 生成的 BPL 文件似乎正确链接到正确的 DCP 文件,并且不存在旧的/陈旧的 DCP 或 DCU 文件。例如,新的 DCP 文件名为 tee911.dcp。
您能否以某种方式了解哪些包实际上是陈旧的,以及 .bpl 链接时正在读取、链接和静态导入的内容?(我在想可能像 BPL 文件的特殊类似 MAP 的文件?)
更新经过数小时的斗争,并使用了我所知道的每一个技巧,我意识到我没有检查 Windows 7 中文件虚拟化引起的一些VirtualStore
相关问题。这意味着 Windows 7 依赖于在它之上运行的程序. 它为您提供了文件的另一个版本,这不是您想要的。这在几个方面可能是致命的;一; 您重新编译了一个 BPL,但它不是加载的。杀死我的 BPL 位于 VirtualStore 的 SysWow64 文件夹中。请注意,虚拟存储基本上会使幻像文件出现,只有当您是某个“低权限”程序时才会出现,这显然是 Win7/64 位上的 Delphi 2007。要删除当前用户帐户的 SysWow64 VIRTUALSTORE 文件夹中的 BPL 文件:
del %HOMEPATH%\AppData\Local\VirtualStore\Windows\SysWow64\*.bpl
...有些日子我只是讨厌 Windows 体系结构。无论如何,我不会将上述内容作为答案,因为我想知道是否有人有更好的方法或任何提示或建议下次可能会有所帮助。