当我尝试将我的设计时包(在这种情况下命名为
dclFsTee.bpl
)加载到我的Delphi IDE中(它是快速报告4 teechart包装器组件包),它会抱怨:The program can't start because tee7100.bpl is missing from your computer. Try reinstalling ...
我知道的情况下,我的系统中没有任何DCP或DCU文件引用tee7100.bpl
。但很明显出现了问题,我找不到原因。
所有Delphi用户都会遇到一百个关于BPL的“编译失败或无法加载”问题。当被问及该怎么办时,普遍的建议是清理计算机。
然而,我已经花了几个小时来清理我的计算机,尽管一切都编译正常,显然还有一些过时的东西藏在某个地方,因为我正在尝试加载的结果BPL文件仍然想要加载我数天前从此系统中移除的TeeChart BPL版本,以及我能找到的每一个痕迹。
我删除的Delphi 2007中的TeeChart内容包括$(BDS)\Lib和$(BDS)\Lib\debug文件夹中的所有内容,以及系统上所有的DCP和BPL文件夹。此外,命名为TeeChart单元的dcu文件也被删除了。
一旦你到了路的尽头,下一步该怎么做?(格式化硬盘,购买新电脑。)说真的,我认为自己很聪明,但我有一个1TB的硬盘,一个包含80多个文件夹的库路径和一个看起来组织良好的源代码仓库,但显然有些东西隐藏在我找不到的地方。我拥有TeeChart Standard 2012,带有完整的源代码,据我所知,我的开发机不再包含任何旧的TeeChart BPL或DCP文件,这些文件来自于Delphi附带的“tee chart tee7100.bpl”版本。
我运行了随TeeChart提供的“recompile.exe”向导,它似乎只运行MSBuild并构建软件包,在tee.inc文件中编写{$DEFINE x}声明(源分发中有两个文件)之后。
然而,不知何故,似乎其中一个软件包的隐式导入正在引入一些未重建的过时文件,并因此尝试加载tee7100.bpl。新的BPL名称是tee911.bpl。
不是在问很特定的fastreport问题,我只提到它作为我在使用Delphi开发时面临的许多问题的普遍例子。我只是提供fast-report的细节,以便您可以看到这实际上是Delphi IDE中处理组件源代码或包或一组有依赖关系的包时所面临的一般问题的一个特定例子。清理计算机以使您的代码甚至能够构建可能会很棘手。 因此,这里是我的Delphi包对包依赖项解决方案问题:
1.找到或跟踪隐式加载某些不再需要的BPL问题的最有效方法是什么,以便我的代码(构建和编译良好!)实际加载到Delphi IDE中。由Recompile生成的BPL文件似乎与正确的DCP文件链接正确,并且没有旧/过期的DCP或DCU文件存在。新的DCP文件名称例如为tee911.dcp。
2.您是否可以以某种方式获取任何想法,哪个包实际上已过时,以及在.bpl链接时静态读取、链接和导入了什么?(例如,我想到了BPL文件的特殊MAP文件之类的东西)。 更新 经过多个小时的尝试和使用我所知道的所有技巧,我意识到我没有检查由Windows 7中的文件虚拟化引起的一些
VirtualStore
相关问题。这意味着Windows 7欺骗运行在其上面的程序。它会给你另一个版本的文件,而不是你想要的那个。这可能有几种致命的影响;其一:重新编译BPL文件,但加载的不是你想要的那个。折磨我的BPL文件位于SysWow64文件夹中,该文件夹是VirtualStore的一部分。请注意,VirtualStore基本上会出现幻影文件,只有当您是某个“低权限”程序时才会出现这些文件,Delphi 2007在Win7/64位上显然是这样的。要删除当前用户帐户下SysWow64 VIRTUALSTORE文件夹中的BPL文件: del %HOMEPATH%\AppData\Local\VirtualStore\Windows\SysWow64\*.bpl
有些日子我只是讨厌Windows架构。无论如何,我不会把上面的内容作为答案,因为我想知道是否有更好的方法或任何提示或建议,可以在下次帮助。