在Delphi 2010中,将文件添加到DPR文件与项目路径有什么区别?

8
我们正在从D7迁移到D2010,关于清理项目路径我们进行了一些讨论。我们有很多包含大量Pas文件的目录,这些文件被包含在某些项目路径中,但是任何单个项目只使用其中的几个文件。
第一个选项是完全消除项目路径,只在dpr中保留所有已使用的文件。
第二个选项是仅在dpr中保留所需文件,并将其余文件的项目路径设置为相应的目录。
是否有一个选项比另一个更好的理由?
5个回答

10

将所有的单位明确地放置在dpr中,极大地提高了编译时间、代码完成、错误洞察和一般导航。
这并不妨碍您继续将文件组织在文件夹和子文件夹中,但不要依靠不同的路径来查找它们。
在一个有数百万行代码的大型项目中,这会产生巨大的差异。


但是在向DPR添加文件引用的时候有什么限制呢?我的意思是,您不会添加标准的VCL库,例如Classes和Dialogs。那第三方组件或自己编写的组件呢?我的项目非常庞大,但我仍希望代码提示保持快速。 - Roland Bengtsson
作为一个经验法则,我会在dpr中添加所有不属于VCL/已安装的第三方组件的单位。这些都随着库路径一起提供。其他所有内容都是明确添加的,这样你就不需要搜索路径了。当然,你的情况可能有所不同,特别是如果你将所有东西组件化了... :) - Francesca
1
你能提供一些编译时间影响的数据吗?对于一个“未优化”的项目,最长的编译时间是多少? - mjn
我真的不太记得我们曾经有过多差的数字,特别是因为我们试图避免处于那种情况。我们的三百万行代码的应用程序通常编译需要约1分20秒。每当我们看到时间变慢时,我们会寻找在dpr中缺失的添加(或隐式添加)单元。我相信我们有几次跳到了约3分钟。 - Francesca
这个来自2012年的答案提到,当所有文件都在项目文件中声明且没有路径名时,编译速度可以提高10-15%,并带来其他优势。https://dev59.com/51jUa4cB1Zd3GeqPWf2_#12633151(Delphi XE3企业版) - mjn

9
我建议将“库单元”与“项目单元”分离,并将所有“库单元”放在搜索路径中,将所有“项目单元”放在项目文件中。以下是原因:
  • 我们的业务项目非常大,几乎有百万行代码,但除此之外,还有数百个用于各种微小事物的小型项目。将“库单元”放在搜索路径中使得使用这些单元变得非常容易,而无需将它们添加到项目中:少了一步,但会累计起来!
  • 使用搜索路径使得移动PAS文件变得更加容易。这对我来说很重要,因为我正在重新组织我们整个“构建环境”,以更好地利用版本控制系统。
  • 当您更改其中一个共享单元并且它依赖于另一个共享单元时,您不需要更新许多项目,它们只需正常工作。
  • 我从不考虑将第三方组件(或VCL组件)添加到我的项目中,那么为什么要将我的“库单元”添加到项目中呢?我们需要划定界限,因为如果我们将绝对所有文件都添加到项目中,希望能够加快编译时间,那么我们最终会得到难以管理的大型项目!
  • Delphi自动更改其DPR文件中的文件名为相对文件名。因此,您无法真正将项目从其当前位置移动。现在尝试“分支”,并在同一台机器上同时保留两个项目副本(一个“发布”和一个“正在进行中”)。 (这是我在为GIT准备我的构建环境,唯一的目的是能够BRANCH)。

供参考,我的“库单元”是那些在不相关项目中使用的单元(例如:组件和实用工具)。


3
我认为应该将项目使用的所有文件都包含在项目本身中。这样可以通过确保所使用的单元是项目的一部分来改善“Insights”的性能。此外,这还使您更容易在项目管理器中管理代码。具有复杂路径的大型项目是脆弱的,难以管理。

+1 为指出路径管理问题。我曾经参与过一个大型多项目构建的配置管理,使用库路径来处理不是为每个项目专门创建的任何单元,我可以证明这可能会引起许多头痛。特别是当开发人员忘记使用相对路径时。我已经数不清有多少次“快速重建”变成了一个小时的追踪单元文件位置并在项目文件中替换路径。 - Kenneth Cochran

2
关于加速Insights的评论引起了我的兴趣,我会尝试一下,但到目前为止,我从未在使用共享单元的项目中包含它们。相反,我为每个库创建了一个包,并将其添加到项目组中(主要是为了组织目的,即我从未实际编译它们作为运行时包)。我发现这比将所有文件放在一个项目中更容易管理(特别是在项目管理器中的所有最近改进),因为单独(包)项目内的文件夹层次结构不会很深,特别是那种方式没有“..”级别。

1

不将所有文件包含在项目中的原因:

  • 打开/关闭项目所需时间更短(表单和数据模块需要额外的时间)
  • 更快的文件重构(重命名/移动文件和目录不需要编辑所有项目)
  • 更容易找到作为应用程序逻辑核心要求和入口点位置的单元(uses MyInterfaces、MyTypes、MymMainUnit;

还有这个 QC 条目:

报告编号:77687(RAID:273031)
状态:打开 编辑 .dpr 源代码随着项目中单元数量的增加而变慢 http://qc.embarcadero.com/wc/qcmain.aspx?d=77687

更新:现在我知道有很多方法可以打开项目文件 :) - 但我的观点是,在一个包含500个单元引用的dpr中,很难找到“重要”(或“主要”)单元,这些单元是深入源代码的起点 - 如果它是一个只包含必要单元引用的“轻量级”项目文件,那么调查代码就更容易了。

找到主单元总是很容易的:在德语Delphi中按Alt-p-q。 :-) - Uli Gerhardt
@Ulrich:抱歉,我找不到它(英文版),但我猜这只是为了找到主窗体? - mjn
1
在我的D2007中,它是“项目”菜单的第五项。在英语中应该被称为“查看源代码”。它显示*.dpr文件。 - Uli Gerhardt
@Ulrich 看看我的编辑,它不必是 VCL 应用程序 - 在 uses 子句中使用较少的单元会使得更加清晰。 - mjn
在英文版的Delphi中,按下Alt-p-v可以跳转到.dpr文件。 - Frank Shearar
请注意,QualityCentral现已关闭,因此您无法再访问qc.embarcadero.com链接。如果您需要访问旧的QC数据,请查看QCScraper - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接