如何防止Delphi意外修改DPR文件(项目源代码)

8
为了维护项目,Delphi有时会向DPR文件(项目源代码)中添加或删除内容。我喜欢将我的DPR格式化为普通单元,例如将“used”帧引用和项目源文件分组在一起。我会复制它并在需要时回退,但偶尔我会注意到DPR的所有源文件引用都被压缩成一个块。有其他人也遇到这个问题吗?除了只读文件外,有没有防止这种情况发生的方法?谢谢。

5
版本控制是解决方案。 - David Heffernan
4
@David:更像是一种权宜之计而非解决方案。 - Toto
1
@Toto,由于Brian正在手动复制此文件,我认为使用一些版本控制工具会解决很多问题,但你的观点也是正确的! - David Heffernan
1
@Mikey,IDE 经常会破坏我的 .dpr 文件。我的 .dpr 文件在 uses 子句中有一个条件语句。此外,在 begin 和 end 之间,我的一些 .dpr 文件是非标准的。因此,开发人员无法控制 IDE。 - David Heffernan
1
@Mikey:不,这个IDE在暗示它的项目管理设计可以更好。 :-) - Uli Gerhardt
显示剩余11条评论
4个回答

9
我在大多数项目中使用这两个文件:
- MyProgram.dpr - MyProgramUnit.pas
MyProgramUnit有一个公共方法Main,其中包含来自dpr的所有逻辑(包括任何条件定义)。
MyProgram只调用Main。
编辑1: 您可以将uses列表放在MyProgramUnit.pas中,但它们不会自动成为项目的一部分。这可能是问题或不是问题,这取决于您是否希望Delphi在搜索路径中查找单元,或者添加文件以使它们可见。
您可以在MyProgramUnit.pas中记录使用列表,并按原因对它们进行分组。这是我通常在大多数单元中做的事情,而不仅仅是在主单元中。
编辑2: 不要使用{$I MyIncludeFile.inc}。 Delphi - 特别是IDE - 不擅长处理包含文件。代码完成等在不规则的位置失败。
过去我很重视包含文件;现在不再如此。我甚至停止使用它们进行定义,并从{$IFDEF define} ... {$ENDIF}转向{$IF Constant1 >= Constant2} ... {$IFEND}。

+1 这是一个非常好的想法。你能把所有的用途都放进去吗? - David Heffernan
2
@David,你可以使用任何单位。但是在MyProgramUnit中使用单位并不意味着它们是项目的一部分,因此该单元没有理由使用它不直接需要的内容。 - Rob Kennedy
@Rob 那么这就是一种半解决方案。 - David Heffernan
1
+1 这是我们在控制台项目中所做的。应该再次查看它,以用于客户端和服务器项目... - Marjan Venema
@Marjan 我使用它来在控制台基于单元测试的应用程序和UI应用程序之间进行切换,以及在Windows服务和常规进程之间进行切换:两个不同的.dpr文件共享相同的主要单元。 - Jeroen Wiert Pluimers
显示剩余3条评论

7
.dpr文件是一个普通的Delphi文件,但一旦在IDE中打开,它就被IDE所“拥有”。当IDE认为必要时(例如添加单元、更改某些设置等),无法阻止IDE向其中添加或删除代码。这也可能意味着它会重新格式化部分代码。
如果您想要“不可变”的代码,请将其放入一个单元中。

2
...或者干脆不使用IDE。使用记事本和命令行编译器。 :-) 我早就放弃了并意识到Delphi IDE拥有.dpr文件以及我在上面写的任何东西,特别是Uses子句,都可能会被更改。由我来提交或还原该更改(版本控制)。任何不使用版本控制且进行离线备份的人;好吧...我同情那个傻瓜。 - Warren P
2
好吧,与其使用记事本,我可能会使用更好的编辑器,但这是可能的。真正的程序员... - Rudy Velthuis
真正的程序员...使用VIM。 - Warren P
1
@Warren - "我同情那个傻瓜" +1 - Vector

1

我认为Rudy是对的。

在我的看法中,在编辑器中不要随意修改dpr uses块,这样做可能会破坏您的项目设置,并且可能会在大型项目中引入一些难以追踪的错误。至于格式化,在Delphi XE中,有自动格式化功能可对整个项目进行格式化操作,并且还可以进行配置。

我通常会编辑dpr的“program”部分(这也需要一些知识和谨慎),但不会编辑uses块。

另外一个要点:dpr中发生的一些事情可以通过您的项目选项设置来控制。

希望有所帮助。


3
集成开发环境对于其 .dpr 和 .dpk 文件非常严格。 <笑> - Rudy Velthuis

0

个人而言,我会在 DPR 文件的末尾创建一个巨大的注释,将我的 uses 子句复制进去。这样当 Delphi 修改它时,我可以从注释中“还原”它。当然,我必须小心地保持我的“uses 注释”更新。

注意: 我正在使用扫描项目文件的外部工具,因此无法使用“外部单元”方法,尽管它似乎是最干净的解决方案。


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