我可以阻止 XE8 添加 System.ImageList 吗?

Can I prevent XE8 from adding System.ImageList?

XE8 中的表单会自动添加使用 System.ImageList。就像在embarcadero site上说的:

System.ImageList contains the common for both FireMonkey and VCL code implementing the most basic device-independent features of image lists. System.ImageList contains the code supporting interaction between images in an image list and using them components (like controls, menu items, and so on).

但我的同事大多还在使用XE7。现在,他们需要在我提交后删除不断使用的内容。当我要删除它时,我的 XE8 会自动添加它。当然,我可以在与另一位编辑提交之前删除这些用途。但是当我可以阻止 XE8 添加这部分代码时,它会更有效率。或者 Firemonkey 和 VCL 会停止正常工作吗?

所以我的问题是:我可以阻止 XE8 在我的表单中添加 System.ImageList 吗?

Can I prevent XE8 from adding System.ImageList to my uses in a Form?

没有。 IDE 会不惜一切代价做到这一点。您的选择包括:

  • 将单元包装在条件中,以便 XE7 编译器看不到它。
  • 创建一个虚拟的空单元,命名为 System.ImageList,您将其列在 .dpr 文件中,再次用条件包装起来,以便它只能被 XE7 编译器看到。
  • 为不同的版本维护单独的 .dproj 文件。在 XE7 版本中添加一个单元别名,将 System.ImageList 映射到 System
  • 在使用文本编辑器或脚本提交之前删除单元。
  • 让您的团队标准化 Delphi 的通用版本。

就我个人而言,我会推荐后一种选择。请记住,您可以愉快地并排安装多个 Delphi 版本,并且如有必要,可以为不同的项目使用不同的版本。这在维护程序的发布分支时是必不可少的。

如果您根本无法做到这一点,那么单位别名可能是侵入性最小的选择。我猜你没有将 .dproj 文件置于修订控制之下,因为如果你这样做了,那么你将面临 XE7 修改 XE8 版本的类似问题,反之亦然。因此,如果 .dproj 文件不在修订控制范围内,那么只为 XE7 用户在本地进行修改应该很容易。但是像这样的技巧应该只被视为一个临时的垫脚石,让你在 Delphi 的同一版本上保持漂浮。

更一般地说,Embarcadero 目前正在非常频繁地发布新版本。升级需要时间。您必须安装,解决任何编译问题,在编译器下测试构建,并处理出现的任何缺陷。您不必进行每次升级。跳过一些很好。这样做会更有效率。在我的工作场所,我们从 XE3 迁移到 XE7,并且不打算采用 XE8。如果您确实进行了升级,请确保收益大于成本。

此代码仅在 XE8 及更高版本中启用 System.ImageList

  uses
      System.Classes, 
      System.SysUtils, 
      {$IF CompilerVersion >= 29}System.ImageList,{$IFEND}
      VCL.Forms,
      VCL.Dialogs, 
      VCL.StdCtrls,
      VCL.Controls, 
      VCL.Buttons, 
      Vcl.ExtCtrls, 
      Vcl.ImgList, 
      Vcl.ComCtrls, 
      Vcl.ToolWin;