【问题标题】:Would anyone recommend re-creating NEW projects and re-adding source, and why?有人会建议重新创建新项目并重新添加源代码吗?为什么?
【发布时间】:2012-01-22 20:10:27
【问题描述】:

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

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

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

那么您认为这其中的风险是什么?为什么或为什么不是一个好主意?除了“重置”默认值之外,还有其他选择吗?

【问题讨论】:

  • 这对我来说听起来并没有什么风险,除了你必须确保之前和之后有相同的编译器选项这一显而易见的事实之外。或者,如果您更改任何编译器选项,那么您就是故意这样做的。花一些时间来解决这个问题,并确保您充分利用了构建配置和选项集功能。首先对它们进行一些实验,以便您确切了解它们的工作原理。
  • 仅仅因为他们从 D1 开始就一直存在并不是一件坏事。多年来,许多应用程序已通过版本迁移。这些应用程序最近使用的是什么版本开发的?版本的跳跃越大,您遇到的问题就越多。一种选择是将应用程序加载到 XE2 中并执行 Ctrl O+O。将插入的编译器指令复制到单独的文件中,然后执行您的新项目构想。再次执行 Ctrl O+O,将指令复制到新文件,然后比较文件。通过这种方式,指令的任何变化都会更容易被发现。

标签: delphi delphi-xe2 code-organization projects-and-solutions


【解决方案1】:

重新创建项目文件应该没有什么坏处,但也不应该添加任何有用的东西。我会认真质疑你的动机,我会考虑只更改需要更改的内容:

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

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

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

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

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

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

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

.\$(Platform)\$(Config)

【讨论】:

【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 我个人认为我的回答在您编辑之前更有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    相关资源
    最近更新 更多