停止Delphi自动错误地添加单位

nor*_*aul 2 delphi uses-clause delphi-xe7 delphi-xe8

我正在将我们的项目从XE7更新到XE8.目前他们仍然需要使用XE7,因此需要一些条件.例如,ImageList已更改单位,因此Vcl.ImgList是XE8中的Syste.ImageList.为了使它适用于两个Delphi版本,uses子句看起来像这样:

uses
  System.SysUtils, System.Classes, Vcl.Controls
  {$IF CompilerVersion >= 29.0}
  ,System.ImageList
  {$else}
  ,Vcl.ImgList
  {$endif}

  ,cxGraphics;
Run Code Online (Sandbox Code Playgroud)

有时这很好.但是,Delphi通常会自动重新添加System.Imagelist单元,即使它已经存在,尽管是有条件的,例如

uses
  System.SysUtils, System.Classes, Vcl.Controls
  {$IF CompilerVersion >= 29.0}
  ,System.ImageList
  {$else}
  ,Vcl.ImgList
  {$endif}

  ,cxGraphics, System.ImageList;
Run Code Online (Sandbox Code Playgroud)

编译时,XE8会抱怨.

[dcc32 Error] dmImagesU.pas(13): E2004 Identifier redeclared: 'System.ImageList'
Run Code Online (Sandbox Code Playgroud)

a)为什么Delphi添加单元?b)有人知道解决方法吗?

Ste*_*nke 5

在这种情况下,负责为使用添加单元的"解析器"没有正确地考虑编译器指令(该问题已经在引入时出现System.Actions.pas).

我通常为较旧的Delphi版本创建一个虚拟单元,所以我不必将任何指令放入使用中.

所以在你的情况下,只需创建一个空System.ImageList.pas并将其放在某处<= XE7找到它.