我们有一个大型SQL驱动的软件系统,自Delphi 1以来就已存在。它在所有各种项目中使用相同的原始项目文件。我们最近开始升级到Delphi XE2,我一直在考虑创建新项目文件并重新添加所有源代码的想法 - 以确保它们获得新的推荐默认值Delphi XE2项目。
有人会推荐这个吗?有什么风险?显然这是一项艰巨的任务,重新定义版本号,项目名称/描述/公司信息等等。但是原始项目的大小让我感到害怕。 3个主要的可执行文件和许多其他可执行文件,总共可能接近300万行代码。
我想这样做的主要原因是因为我已经看到新的Delphi XE2项目如何自动创建每个平台和发布的子目录(Win32,Win64,Debug,Release等)。我们的项目目前很乱,我一直在努力清理它。
那你觉得风险是什么呢?为什么或为什么不是这个好主意?是否可以选择“重置”默认值?
答案 0 :(得分:13)
重新创建项目文件不应该受到伤害,但它也不应该添加任何有用的东西。我会严肃质疑你的动机,我会考虑只改变需要改变的东西:
我们的项目目前很乱,我一直在努力清理它。
任何围绕一个大项目的人都可能认为在某些时候。如果某处确实存在某些“混乱”,则它位于项目的源文件(PAS,DFM)中,而不是实际的项目文件中。重构可能应该反过来。重新组织源文件(如果需要),删除被证明是冗余的文件,项目文件将立即反映新发现的清洁度。
显然这是一项艰巨的任务,重新定义版本号,项目名称/描述/公司信息等。
在项目的选项中,这是ALL的一页。老实说,我怀疑这将是你需要做的最困难的事情。您更有可能发现第三方组件和其他内部项目的硬编码依赖项。那些 会很难追踪,因为你会一次又一次地点击ReBuild,修复编译器抱怨的一个单位。
这个想法是项目文件列出了构成项目的文件,并包含一组最小的编译器选项和定义。如果您重新创建项目文件,您将最终添加所有编译器选项并重新定义,并且您还将一次一个地添加每个文件,因为该列表实际上是以组成项目的文件的uses
子句。唯一不会重新输入的文件是可以在搜索路径,项目文件夹和真正冗余的文件夹中找到的文件。如果要删除冗余文件,这不是可行的方法。更好地研究某种用途列表分析器。
我想这样做的主要原因是因为我已经看到新的Delphi XE2项目如何自动创建每个平台和发布的子目录(Win32,Win64,Debug,Release等)
无需为此重新创建项目文件,只需将项目编译器选项中的Output Directory
和Unit Output Directory
更改为:
.\$(Platform)\$(Config)
答案 1 :(得分:2)
如果你要重新创建.dpr
,你需要警惕的一件事是确保你的单位没有任何隐藏的相互依赖性,这些相互依赖性将会以奇怪的方式出现并使你的应用程序行为异常。
事实上,我们最近遇到了这个问题。为了避免为什么完成它的背景故事,我的一位同事创建了一个新项目,并重新添加了所有当前(遗留)项目的单位。重建后,新的可执行文件抛出了访问冲突,然后在屏幕上显示一个对话框提示,他无法找到访问它的原因。
事实证明,项目之间存在相当多的依赖关系(例如,数据模式中的表单OnCreate
调用方法)导致AV,并且首先创建了错误的表单,使其成为应用程序的主要表单。原始项目源具有以特定顺序添加的所有项目以确保这一点。当他重新创建项目时,他以原生顺序添加了Explorer中的所有单元 - 按字母顺序排列。
现在,你可以使用它作为重构应用程序的机会,以确保这些时序问题和依赖关系不是问题,并且可能禁用form-auto创建以便只有表单在您的应用中处于活动状态的是您在任何给定时间点所需的那些。或者你可以直接仔细修改选项以匹配新的默认值,如果它们对你的项目比旧的更有意义。
答案 2 :(得分:0)
虽然不应该受伤,但我不确定你会获得多少收获。
花在这个想法上的努力和时间似乎是一个制作工程,我认为没有任何好处。
最好花些时间实际对您的产品进行可衡量的改进。尝试重新创建项目可能是浪费时间。