F2051单元JclUnitVersioning使用不同版本的System.Contnrs.TObjectList.Remove编译

时间:2012-04-10 13:35:22

标签: delphi delphi-xe2 jvcl jedi-code-library

我正在将Delphi 2项目迁移到RAD Studio XE2。

当我尝试编译时,我得到了

  

[DCC致命错误] MyUnit.pas(9):F2051单元JclUnitVersioning使用不同版本的System.Contnrs.TObjectList.Remove编译

位于以下一行:

unit MyUnit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, DB, DBTables, TB97, ExtCtrls, Grids, DBGrids, Vcl.Mask, JvExMask,
  Vcl.DBLookup,
  JvToolEdit,  {<-- error here}
  TB97Ctls;

{...}

我尝试卸载并重新安装RAD Studio,JCL和JVCL,但没有任何变化。

更新使用二进制Jedi installer from A.Hausladen(仅用于Delphi试用版)。

2 个答案:

答案 0 :(得分:1)

您要么有旧的DCU文件,需要重建或删除,或者您的项目或库路径内容不一致。 (查找名称为JclUnitVersioning.dcu的文件不在正确的JCL库文件夹中,然后删除它们。正确的库文件夹名为jcl\lib\d7,通过jcl\lib\d16,具体取决于您的delphi版本号)< / p>

这通常意味着您的项目可以访问包含预编译的DCU文件的库路径(或项目搜索路径)中的目录,也可以访问某些源单元(.pas文件)并且依赖于其他单位的一个或多个单元是在与现在不同的时间编译的,具有多个版本的公共单元。我希望我能给你画一幅画。

想象一下,你有一辆车,有人升级引擎,将它从V6更改为V8。现在,曾经为您的发动机提供维修服务的人会回来并试图找到V6排气歧管附着的地方。它不再存在了,它已经移动了。由于新发动机以其当前形状冷冻(留在这里!),您的服务技术人员只需回到您(客户)并说:“对不起,我很困惑,我无法继续,我放弃了”。这大致就是这个错误信息的含义。

可以通过多种方式进行清理;确保从.pas文件编译100%并且根本没有包含.dcu文件的库文件夹可能是一件简单的事情。当然,这是不太理想的,因为图书馆路径的整个目的是包含DCU文件的预编译“库”。

相反,我建议您进行清理(删除所有DCU文件)并从源代码重建所有组件包(为此目的确实有批处理文件吗?)然后检查项目的搜索路径,库路径,看它们都只包含你认为应该包含的文件夹。

答案 1 :(得分:1)

Delphi 2010和XE3也遇到了同样的问题(迁移时同时在同一台PC上)。

经过几个小时的重新编译我的项目和JCL项目(​​我的PC上的安装程序bat文件错误)后发现问题是在tools / options / Delphi Options / libraries中声明目录的顺序。

全力以赴,添加了特定于版本的目录(例如lib \ D14,lib \ D17 \ Win32),然后是其他所需的JCL子目录(即一次一个,直到使用JCL的项目构建)