阻止 IDE 自动添加使用单位

Posted

技术标签:

【中文标题】阻止 IDE 自动添加使用单位【英文标题】:Stop the IDE from adding uses units automatically 【发布时间】:2016-02-14 01:23:22 【问题描述】:

我正在将一个 Lazarus 项目搬到西雅图的德尔福。

Lazarus 项目依赖于 40 多个单元(包括控件)并有多个应用程序。

在所有项目的使用条款中,他们使用了以下内容:

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, DBCtrls, $I OurLibrary.inc;    

他们将这 40 多个单元包含在 $I OurLibrary.inc 中。

因为其中一些单元是控件,所以我在 Delphi 中注册了它们。

但是,如果我保存项目或构建/编译它,Delphi 会再次将单位添加到使用部分。

  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, DBCtrls, uOurEdit, $I OurLibrary.inc; 

在这种情况下,单元 uOurEdit 被再次添加,即使它位于 $I OurLibrary.inc 中。

如果我手动删除它并再次编译项目,它就会运行。 一旦我切换回设计器模式并尝试运行它,同样的事情就会不断发生 - 它会再次添加 uOurEdit。

一旦你移除了一个单位,Lazarus 就不会再添加它。 Delphi 就是这样做的。

有没有办法告诉 Delphi 停止读取单位或停止自动添加单位?

【问题讨论】:

另见Why is my component auto adding other units to the uses interface?。 【参考方案1】:

我同意使用包含文件不是一个好主意,但实际上有一种方法可以阻止 IDE 自动添加这些单元。

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, DBCtrl,
  $IFDEF DUMMY
  // add those units here which you don't want to automatically add
  // the IDE won't add them but they won't be part of the uses assuming
  // DUMMY is undefined
  uOurEdit,
  $ENDIF
  // Here comes the rest of the units
  $I OurLibrary.inc;

这可能对您不起作用,因为无论如何您都必须手动添加uOurEdit,所以也许最好听从 Rob 的建议。然而,这种技术可用于停止 IDE 自动添加单元。

【讨论】:

【参考方案2】:

IDE 认为您的代码的某些部分在其控制之下。这包括大部分 DPR 文件、表单或数据模块声明的默认 published 部分,以及单元的 interface 部分的 uses 子句。最好不要在这方面与 IDE 抗争。你最终会输。

我不建议在uses 子句中使用include 指令。正如您已经注意到的,IDE 不会读取包含的文件来确定单元列表。表单设计器会自动添加它认为需要的单元,而且没有办法阻止它。

由于 IDE 会在使用控件时自动添加控件单元,因此您应该能够安全地从包含文件中删除它们。

您还可以考虑将您的单位列表移动到implementation 部分的uses 子句中。 IDE 不会触及那个。

【讨论】:

OP 提到某些单元包含可能经常放置在表单上的控件,因此单元必须出现在 界面 使用列表。否则,控件将不得不在运行时在表单类中使用不方便的泛化超类引用来实例化。 参见第 3 段,@Deltics,其中我建议从包含文件中删除这些单元,因为 IDE 会自动将它们添加到 interface 部分。 我理解 IDE 没有遵循 include 指令,但是如果它在决定缺少哪些单元时考虑到您的构建配置的单元别名,这样它就不会添加重复项......

以上是关于阻止 IDE 自动添加使用单位的主要内容,如果未能解决你的问题,请参考以下文章

是否可以阻止 requireJS 自动添加 .js 文件扩展名?

如何阻止 Safari 使用错误的电子邮件自动填充电子邮件字段?

流星文件命名约定会阻止它处理?

如何阻止360浏览器访问指定网站?

是啥阻止了这个动画是自动的?

阻止 iPhone 视频自动全屏