将单位名称显式添加到Delphi';s项目来源

将单位名称显式添加到Delphi';s项目来源,delphi,Delphi,我多年来一直在使用Delphi,我的每个项目都是从源代码编译成exe-no包等。如果在任何地方使用“MyUnitA.pas”,它只是在需要它的另一个单元的接口或实现部分声明。这一切在任何地方都很好,这意味着在我的项目源(dpr)中只有框架定义(在那里似乎是需要的,否则它们不会出现在框架列表中)和必须很早调用的单元的“奇数”定义,例如madExcept、FastMM等 我注意到XE有时会在解析dpr中的内容时有点犹豫,直到您真正编译它。此外,当使用包时,如果在没有显式添加到包中的情况下必须隐式拉入

我多年来一直在使用Delphi,我的每个项目都是从源代码编译成exe-no包等。如果在任何地方使用“MyUnitA.pas”,它只是在需要它的另一个单元的接口或实现部分声明。这一切在任何地方都很好,这意味着在我的项目源(dpr)中只有框架定义(在那里似乎是需要的,否则它们不会出现在框架列表中)和必须很早调用的单元的“奇数”定义,例如madExcept、FastMM等


我注意到XE有时会在解析dpr中的内容时有点犹豫,直到您真正编译它。此外,当使用包时,如果在没有显式添加到包中的情况下必须隐式拉入内容,则会发出警告。这让我想知道我们是否应该努力将所有使用过的单元添加到dpr(如包定义)或右键单击project并“添加到project”。你是做什么的?

我个人的搜索路径为空,并且在.dpr文件中包含所有单位。在我看来,这种方法的主要优点是:

  • 我确切地知道哪些文件包含在我的项目中
  • 视图单位(Ctrl+F12)、视图表格(Shift+F12)提供项目中的所有单位和表格

我并不认为这种方法有任何明显的缺点。是的,当您包含新的第三方组件时,您必须将文件添加到.dpr文件中,但根据我的经验,这种情况并不经常发生,因为它会成为一个很大的负担。

在每个项目中添加单元名称的缺点:

  • 启动一个新项目需要大量的“锅炉板”。这是短期项目的一个问题
  • 并不是所有的项目都在我的控制之下。我可以控制同事的搜索路径,因为这是需要更改的一件事,但我不能控制每个项目,因为这不再是一件事。我们只处理很少的非常大的项目,但我们通常有很多小的实用程序或助手项目
  • 使重构变得困难。如果我们有20个项目使用单元A,并且我们使单元A依赖于单元B,那么我们需要将单元B添加到所有20个项目中。如果这20个项目由公司的5个不同的程序员管理,事情就会开始变得糟糕。另一方面,如果5个程序员的20个项目都能通过搜索路径找到单元B,事情就简单了
  • 使同一单元具有多个版本变得容易,因为在克隆项目时复制了给定单元。在我看来,这是件坏事

我个人将所有“库”单元(包括第三方软件包)保存在一个大文件夹中,该文件夹受版本控制。我们称这个文件夹为“工作环境”,我们有一个内部工具可以“激活”环境(即:它更正IDE的搜索路径,安装软件包,将内容复制到系统文件夹,将条目添加到注册表,甚至创建一些“开始”菜单快捷方式)。这对我来说非常有效。

我发现在.dpr和.dproj中添加文件的最大缺点是,如果您添加行A,而您的同事在同一位置添加行B,则会在这两个文件中产生冲突,这将确保您从许多VCS处获得“冲突”。它们在.dpr中很容易解决,在.dproj中更容易混淆,后者通常格式不太好。 这里有一个问题,Delphi最初只使用.dpr来列出文件,然后开始使用这两个文件,而IMHO现在的.dpr的use子句应该只在任何其他源文件中使用,而项目中使用的文件列表应该只包含在.dproj中(IDE项目管理确实需要改进,而不是变得更加混乱…)。
因此,我有1)第三方标准库的库文件夹(环境变量集为根路径,允许不同的项目使用不同的项目)2)项目库路径,其中包含未与其他项目共享的文件3)仅将相关文件添加到项目源,主要是表单/数据模块。

我支持David的观点。我们/我也这么做

依赖性控制是主要的好处。单元使用的明确性有很大的优势。我从不怀疑项目的来源

另一个好处是,作为一个团队,我们从不依赖IDE中的搜索路径。我们所有的机器都有空的搜索路径,只有调试搜索路径中的项目,如果我们正在获取一个控件来执行我们的投标。在使用GUI时,我们只在IDE中添加控件(GUI本身很大,但实际上只是软件的一小部分,我们主要使用Delphi附带的控件)。之后我经常会去安装它们。最大的优点:当我需要在一个非常旧的版本上工作时,我可以简单地从Perforce中提取它,并使用正确的Delphi编译器构建它。其他一切都在dproj中处理(或dof,因为我们仍然可以编译基于D5的版本)


不依赖IDE中的搜索路径也意味着构建服务器不需要配置任何搜索路径。我们有一个实用程序,它可以使dproj与为我们的软件版本配置的第三方库版本保持一致。我们有一个实用程序,可以从dproj/dof创建一个cfg文件。通过这种方式,我们可以构建世界上任何地方仍在使用的软件的每个版本,而不考虑它需要的编译器和第三方组件版本。我们可以做到这一点,而无需更改构建服务器的设置中的任何内容。事实上,我们每晚都会构建所有“活动”版本,如果对其Performce分支进行了更改,我们甚至不去想它。

Con:Quality Central中的问题77687:

在.dpr源代码中编辑可能非常困难 即使使用所有代码洞察,速度也很慢 选项已禁用。它的速度越来越慢 该项目拥有更多的单元(以下简称 单元的内容不匹配