正如 Ken 所说,接口使用子句将由 IDE 修改,并且实现此目的的过程有些不太复杂(正如您所发现的)。同样的问题影响项目使用条款。不幸的是,在 Form/DataModule 使用子句的情况下,这种情况很难避免。
你可以使用单位别名(请参阅 David Heffernan 的回答)但需要注意,如果您为 IDE 希望添加的单元创建别名,那么 IDE 仍会添加对所需单元的引用,因为它不会将别名识别为标识所需的单元单元。别名为System单元将避免这种情况,因为它已经被每个单元(隐式)使用。
另一种选择是从使用列表中删除所有此类条件,并根据需要创建占位符单元,以便您希望在项目中使用的不同编译器都可以通过从每个 IDE 坚持的列表组合而成的单一使用列表来满足是必需的(IDE 不会从使用列表中删除未使用的单元,这通常是一个抱怨,但在这种情况下实际上有助于解决您的问题)。
在本例中,在您的 Delphi 2010 项目中创建一个空的Actions unit:
unit Actions;
interface
implementation
end.
您当然需要确保该装置是not在您的 XE7 版本项目的项目路径中。
实现这一目标的一种方法是确保空动作.pas单元未明确列在 DPR 使用列表中,而是放置在项目源的子文件夹中(例如“占位符”)。然后,您可以将此子文件夹添加到 Delphi 2010 版本的项目搜索路径中,但不能添加到 XE7 版本的项目搜索路径中:
\Project Folder
project2010.dpr
project2010.dproj
projectXE7.dpr
projectXE7.dproj
\placeholders
Actions.pas
如果您发现每个不同版本都需要占位符,那么您将需要单独的占位符文件夹。您可以创建更多版本特定的子文件夹,例如:
\placeholders
\2010
Actions.pas
\XE7
D2010UnitNotPresentInXE7.pas
仅从创建自动/自记录组织的角度来看,这种结构可能是明智的。
请注意,这仅在处理单元引用时才需要。uses的条款界面的部分Forms (or FramesETC)。在非视觉单位或执行部分,IDE 不会干扰,因此条件编译指令应该不会出现任何问题。