4

我们有一个大型的 SQL 驱动软件系统,自 Delphi 1 以来就一直存在。它在所有不同的项目中使用相同的原始项目文件。我们最近开始升级到 Delphi XE2,我一直在考虑创建新项目文件并重新添加所有源代码的想法 - 以确保他们获得新 Delphi XE2 项目的推荐默认值。

有人会推荐这个吗?有什么风险?显然这是一项艰巨的任务,重新定义版本号、项目名称/描述/公司信息等。但让我害怕的是原始项目的规模。3 个主要可执行文件加上许多其他可执行文件,总共可能有将近 300 万行代码。

我考虑这样做的主要原因是因为我已经看到新的 Delphi XE2 项目如何自动为每个平台和版本(Win32、Win64、Debug、Release 等)创建子目录。我们的项目目前一团糟,我一直在努力清理它。

那么你会说这其中的风险是什么?为什么或为什么不是一个好主意?是否有“重置”默认值的替代方法?

4

3 回答 3

13

重新创建项目文件不应该受到伤害,但也不应该添加任何有用的东西。我会认真质疑您的动机,我会考虑仅更改需要更改的内容:

我们的项目目前一团糟,我一直在努力清理它。

任何参与过大型项目的人都可能在某个时候这么认为。如果某处确实存在一些“混乱”,则它在项目的源文件(PAS、DFM)中,而不是在实际的项目文件中。重构可能应该反过来。重新组织源文件(如果需要),删除被证明是多余的文件,项目文件将立即反映新发现的清洁度。

显然这是一项艰巨的任务,重新定义版本号、项目名称/描述/公司信息等。

这就是项目选项的一页上的全部内容。老实说,我怀疑这将是你需要做的最困难的事情。您更有可能发现对 3rd 方组件和其他内部项目的硬编码依赖项。追踪这些很痛苦,因为你会一次又一次地点击 ReBuild,修复编译器抱怨的一个单元。

这个想法是项目文件列出了构成项目的文件,并包含一组最小的编译器选项和定义。如果您重新创建项目文件,您最终将添加所有编译器选项并重新定义,并且您还将一次添加每个文件,因为该列表实际上是编码的uses组成项目的文件的子句。唯一不会返回的文件是那些可以在搜索路径、项目文件夹中找到的文件以及那些真正多余的文件。如果要删除冗余文件,这不是要走的路。更好地研究某种用途列表分析器。

我考虑这样做的主要原因是因为我已经看到新的 Delphi XE2 项目如何自动为每个平台和版本创建子目录(Win32、Win64、Debug、Release 等)

无需为此重新创建项目文件,只需将项目编译器选项中的Output Directoryand更改为:Unit Output Directory

.\$(Platform)\$(Config)
于 2012-01-23T07:39:19.167 回答
2

如果您要重新创建它,您需要注意的一件事.dpr是确保您的单元没有任何隐藏的相互依赖关系,这些相互依赖关系会突然出现并使您的应用程序以奇怪的方式行为不端。

事实上,我们最近遇到了这个问题。我的一位同事避免了为什么这样做的背景故事,创建了一个新项目并重新添加了当前(旧)项目的所有单元。重建后,新的可执行文件引发了访问冲突,然后在屏幕上显示了一个对话框提示,他找不到访问的原因。

事实证明,导致 AV 的项目(例如,表单在数据模块中的调用方法)之间存在相当多的依赖关系OnCreate,并且首先创建了错误的表单,使其成为应用程序的主要表单。原始项目源以特定顺序添加了所有项目以确保这一点。当他重新创建项目时,他按照原始顺序添加了 Explorer 中的所有单元——按字母顺序。

现在,您可以借此机会重构您的应用程序,以确保这些类型的时间问题和依赖关系不会成为问题,并且可能禁用表单自动创建,以便您的应用程序中唯一处于活动状态的表单是您的表单在任何给定的时间点都需要。或者您可以直接仔细修改选项以匹配新的默认值,如果它们对您的项目比旧的更有意义的话。

于 2012-01-23T16:08:15.087 回答
0

虽然它不应该受到伤害,但我不确定你会获得多少。

在这样一个想法上花费的精力和时间似乎是一个虚构的项目,我认为它没有任何好处。

最好花一些时间实际对您的产品进行可衡量的改进。尝试重新创建项目可能是浪费时间。

于 2012-01-24T03:22:54.323 回答