何时应该向Delphi项目添加文件引用?

7
标准VCL文件(如Dialogs、StringUtils等)的单元文件从未在项目的DPR文件中引用。但是什么时候应该向DPR文件添加引用呢?现在我有自己的源文件和自己组件的源代码。
那么Ravereport、Devexpress、Indy、Gnostice等的源文件呢?我希望尽可能快地进行代码提示,但当然我不想向DPR文件添加臃肿的内容。我使用的是Delphi 2007。
有关相关问题,请参见此问题
问候。
3个回答

7
我总是将项目使用的所有代码单位添加到dpr uses子句中。只有在需要时才添加VCL单元和第三方库的单元。因此,项目库路径仅包含指向vcl和第三方库的路径。
虽然将所有单元添加到项目的dpr中不是必需的,而且需要一些额外的工作,但这使得依赖关系更明确,并有助于避免由潜在的“旧”dcu在库路径上潜藏而导致的问题。
当您具有相同名称但针对不同项目具有不同内容的单元时,这也很有用。共享单元仅使用“unit1”,而dpr则指定哪一个。比使用库路径更明确,更少出错。
在我的环境选项中,项目的dpr还始终包括使用的所有组件的路径,无论是vcl还是第三方。我的库路径为空。它甚至不包含指向vcl的路径。这可能有点夸张,但嘿,容易检查...
同样,这有助于使依赖关系更加明确,当您在路径中使用自己的环境变量时,例如$(MVC)\ComponentName\Source,将代码带到另一台机器上时也很有用。我需要做的唯一事情就是复制所有内容(或者将其携带在USB闪存中),并在Delphi IDE中设置MVC环境变量。我可以放心,无论另一台机器安装了什么,在构建我的项目时都不会产生干扰。

2

您只需要(也应该只)在DPR中添加您的项目实际使用的引用。例如,如果您正在编写一个测试项目(包含项目的测试代码),您可以添加GuiTestRunner或TextTestRunner(用于DUnit):

program MyTest;

uses
  all.pas in 'src\all.pas',
  your.pas in 'src\your.pas',
  project.pas in 'test\projects.pas',
  units.pas in 'test\units.pas',
  TextTestRunner;

var
  R: TTestResult;

begin
  R := TextTestRunner.RunRegisteredTests;
  ExitCode := R.ErrorCount + R.FailureCount;
end.

否则,使用Indy或其他第三方单元,请在实际使用它们的单元中引用它们。

我的DPR文件有一个相对较短的代码部分,没有引用太多的单元。但是项目中自己的源文件和组件数量非常庞大。目前在DPR的uses部分添加了483个文件。主要是因为我认为这样可以提高代码提示的速度。请参见https://dev59.com/L0fRa4cB1Zd3GeqP7kN2#764053 https://dev59.com/_03Sa4cB1Zd3GeqPwp2E#2777819 - Roland Bengtsson
1
我同意你只需要在dpr本身中使用的内容。但我不同意那是唯一应该存在的东西。当你经常切换具有不同库和自己代码版本的项目时,你会发现在dpr中明确依赖关系将帮助你避免很多麻烦。 - Marjan Venema
@Roland。不用担心dpr中的483个引用数量,我们的一个主要项目已经接近700个引用,并且仍在增加... - Marjan Venema
我们公司有一个超过2000行的代码,其中全是自己编写的。甚至在库中还有更多。 - Mason Wheeler

1

我尽可能少地将单元添加到.dpr中。这是因为我不喜欢在那里放硬编码路径,而使用相对路径有时会出现奇怪的错误(如此描述),并且让我相对自由地移动代码。

然而,我并不经常通过项目检查器浏览单元,我主要通过打开单元并使用ctrl-enter来导航单元。我的同事必须大量适应这一点,因此对于一个喜欢用鼠标的团队来说可能不可行。


我从未遇到过你提供链接中描述的那种问题。在任何 Delphi 版本中(自 D3 以来)......也许我只是幸运。 - Marjan Venema

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