如何确定创建Delphi项目的Delphi版本

如何确定创建Delphi项目的Delphi版本,delphi,Delphi,我正在尝试自动确定使用哪个Delphi版本(安装在我的计算机上的Delphi 5到XE2)来打开给定的项目,而不会错误地升级该项目 在Delphi7之前,每个项目都有一个.ini格式的.dof文件。 Delphi 5没有任何可能有用的条目,但从Delphi 6开始,有一个[FileVersion]部分包含以下值: 德尔福5:不适用 Delphi6:6.0 Delphi 7:7.0 所以我想这就解决了这个问题,因为旧的Delphi版本与我无关 对于Delphi 2005和2006,有一个XML

我正在尝试自动确定使用哪个Delphi版本(安装在我的计算机上的Delphi 5到XE2)来打开给定的项目,而不会错误地升级该项目

在Delphi7之前,每个项目都有一个.ini格式的.dof文件。 Delphi 5没有任何可能有用的条目,但从Delphi 6开始,有一个[FileVersion]部分包含以下值:

  • 德尔福5:不适用
  • Delphi6:6.0
  • Delphi 7:7.0
所以我想这就解决了这个问题,因为旧的Delphi版本与我无关

对于Delphi 2005和2006,有一个XML格式的.bdsproj文件,其中包含一个版本条目: \BorlandProject\PersonalityInfo\Option\Option

在Delphi 2005中,如下所示:

1.0

在Delphi 2006中,如下所示:

1.0

因此,我可以查看属性“Type”是否存在,并根据它来决定Delphi2005或2006。 有没有人能看看他的Delphi2005和2006项目,并验证一下这种差异?(或者你有没有更好的主意?)

编辑:我刚刚尝试验证这一点,发现Delphi 2005并不总是添加Type属性。所以现在我被卡住了

编辑:可能存储在那里的GUID对于Delphi版本是唯一的

  • 德尔福2005:{87D03616-A4C7-4B5A-AF0F-0164EA60BC59}
  • 德尔福2006:{CFE1BEE6-6FDE-4241-8CA5-D38D14EAA768}
不知何故,我对此表示怀疑,我担心GUID可能代表不同的SKU(专业人员/架构师等)。但也许你能证实这一点

从Delphi2007开始,有一个不同XML格式的.dproj文件。Delphi 2007格式不包含我能找到的任何版本条目,但从Delphi 2009开始,似乎有以下条目:

\project\PropertyGroup\ProjectVersion

以下是我在.dproj文件中找到的值:

  • 德尔福2007:不适用
  • 德尔福2009:12.0
  • 德尔福2010:12.0
  • 德尔福XE:12.3
  • Delphi XE2:13.4
如果这些是正确的,我可以可靠地确定Delphi2007、XE和XE2。但我如何区分德尔福2009和2010

而且,这些数字在我看来很奇怪。是否有人知道Delphi的各种更新之间是否存在任何差异,例如,最初的Delphi XE2版本是否从13.0开始,并且每次更新都会增加点后的数字?但是如果是这样的话,Delphi XE是如何得到12.3的呢

(有一个类似的问题,但单一的答案非常有限。)


以防其他人需要:我刚刚添加了一个总结所有答案并为更新的Delphi版本(目前更新到Delphi 10.4.1)添加信息的文件。

项目文件中的版本号不受发布或更新的约束,并且并非所有版本都流行

  • Delphi XE RTM使用版本12.2
  • Delphi XE Update#1使用12.3版
  • Delphi XE2(RTM直到更新#4)使用13.4

我现在比较了Delphi 2005和2006的.bdsproj文件,没有区别。此外,Delphi 2009和2010创建的.dproj文件之间没有区别

所以答案是:

  • 如果存在.dproj文件->读取\project\PropertyGroup\ProjectVersion
    • 空->德尔福2007
    • 12.0->Delphi 2009或2010
    • 12.2或12.3->Delphi XE1(根据Uwe Schuster)
    • 13.4->Delphi XE2
  • 如果存在.bdsproj文件->Delphi 2005或2006
  • 如果存在.dof文件->读取[FileVersion]\version
    • 空->Delphi 5(或可能更早)
    • 6.0->Delphi 6
    • 7.0->Delphi 7
不幸的是,这不允许我编写一个程序,为给定的项目自动启动正确的Delphi版本

也许我会让程序询问用户是否有两种可能,并将他的答案存储在一个.ini文件中,以便下次程序知道启动哪个Delphi版本

顺便说一句:我之所以要研究这个问题,是因为我有好几次不小心打开了Delphi2007项目,后来的Delphi版本对其进行了升级,我不得不手动撤销这些更改。这已经变得非常烦人,我想通过将自己的程序注册为.dpr文件的处理程序来防止它。

刚刚安装了XE3(RTM)。
14.3 XE3(C++&Delphi)

今天,我发现这个话题与Delphi版(标准版、专业版、企业版)有关

无论如何,我检查了一些散布在我的机器中的.dof文件,发现了一些与古老的delphi版本相关的事实:

如果存在.dof文件->读取[目录]/Packages

德尔菲3

[Directories]
OutputDir=
UnitOutputDir=
SearchPath=
Packages=VCLX30;VCL30;INETDB30;INET30;
德尔菲5

[Directories]
OutputDir=.
UnitOutputDir=.
PackageDLLOutputDir=.
PackageDCPOutputDir=.
SearchPath=
Packages=Vcl50;Inet50;Inetdb50;Vclx50;Indy50;
可以在dof文件末尾附近找到其他信息:

D3:

D5:


你为什么需要这个?当然你知道你的项目是用哪个版本的Delphi构建的。@DavidHeffernan请看下面我的答案。我建议遵循一个简单的命名约定来清楚地识别特定项目文件的目标Delphi版本。我们把项目文件放在一个子文件夹中。因此,文件夹名称指示要使用的Delphi版本。如果您手动反转更改,则需要使用修订control@DavidHeffernan:对于“手动”,我的意思是单击文件并选择Revert in TortoiseSVN。这并不像实际编辑文件那样困难,但仍然很烦人。顺便说一句:我现在已经解决了这个问题,在项目中添加了一个批处理文件,并在正确的ide中打开了它。单元搜索路径可能会提供一个关于项目链接所针对的编译器版本的提示。这是完整的答案。我本来打算自己创建一个启动器,直到我开始向项目目录添加一个文件,该文件表示要使用哪个Delphi版本。我将文件命名为Delphi(如果只有一个平台:).txt,并在其中保存一个日志,记录对p
[Excluded Packages]
C:\Program Files\Borland\Delphi 3\Bin\DCLDSS30.dpl=Delphi Decision Cube Components
C:\PROGRAM FILES\BORLAND\DELPHI 3\BIN\DCLTEE30.DPL=Delphi TeeChart Components
[Excluded Packages]
$(DELPHI)\Bin\CorIde50.bpl=Borland Core IDE Package
$(DELPHI)\Bin\direct50.bpl=Borland Direct IDE Package