目前我将项目从Delphi XE迁移到XE8。 我们使用一个组件,但最新的版本是针对XE3的,因此我将代码更改并进行编译。 现在我想安装设计时包,但是我得到了rtl170.bpl丢失的错误。 没有人只将rtl170引用到rtl库。 我读了一些关于运行时包的内容,但是在这个项目中我没有项目选项中的包下的这个菜单项。有什么建议? 之前在此计算机上安装了Delphi XE,但在安装XE8之前我已将其卸载。
答案 0 :(得分:1)
适用于XE3所以我接受代码并更改它直到它编译
通常,组件由两个BPL文件,一个运行时包和一个设计时包(使用运行时包)组成。组件库(如Raize,JediVCL,DevExpress等)由数十个BPL对组成。
使用一些工具检查DLL依赖项(示例:CFF Explorer或Microsoft Dependency Walker或WLX FileInfo)并检查组件BPL - 您必须确定组件的BPL中哪一个需要rtl170.bpl
DLL
使用SysInternals Process Monitor记录BPL加载或者只扫描所有磁盘以获取这些BPL名称可能是一个有用的想法。你可能有类似的东西:
这只是一种可能的混淆场景,但肯定会发生。 确保没有遗留下来的xe3制造的BPL。
有时只是查找和删除旧的BPL修复问题(例如 - 修复了XE2的UP4 :-D)。
对于其他人,我们认为你发现不是旧的流氓BPL,而你还是新的XE8编译的BPL仍在参考rtl170。
然后,如果您拥有该组件的完整源代码 - 删除(或暂时移走)所有DCP / DCU文件并强制从所有软件包的源代码编译可能会有所帮助。同样,您可以使用SysInternals Process Monitor等工具对Delphi编译软件包的文件访问日志进行快照。有时它会显示出由于不同的原因,您的德里会忽略DPK / PAS源文件,而是使用旧的DCU / DCP进行编译。
说实话,XE8与XE3的DCU / DCP兼容的可能性很小,这仍然是研究你的情况的途径之一。
现在我们假设您的组件中没有任何dcu / dcp / bpl文件显式位于您可以访问Delphi的HDD上。假设你是编译组件的唯一方法 - 从源代码100%完成。
有可能 - 这些设置在您的错误包的.DPK文件(或任何其他Pascal源)中,或者在您的错误包的.DPROJ文件中(然后可以在IDE项目选项对话框中或通过任何XML访问它们)编辑)。或者在DPROJ和PAS / DPK文件中,有时候。
您要找到这些设置并将其从m170修复为xe8 BPL的实际后缀
答案 1 :(得分:0)
我有同样的问题,花了一段时间才找到解决方案。我目前的Delphi版本是XE6,但是当我尝试安装特定的BPL时,它一直想要使用rtl170。 BPL编译正常但不会安装。曾经有一台XE3在机器上,但我已经卸载了它。
原来我在C:\ Windows \ sysWOw64中有一个相同运行时BPL的旧副本。一旦我删除了sysWOw64中的副本,XE6就不再抱怨了。