【问题标题】:How do I determine the Delphi version which created a Delphi project如何确定创建 Delphi 项目的 Delphi 版本
【发布时间】:2012-04-03 05:07:06
【问题描述】:

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

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

  • 德尔福 5:不适用
  • 德尔福6:6.0
  • 德尔福 7:7.0

所以我想这已经解决了,因为旧的 Delphi 版本与我无关。

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

在 Delphi 2005 中它看起来像这样:

<Option Name="Version" Type="String">1.0</Option>

在 Delphi 2006 中是这样的:

<Option Name="Version">1.0</Option>

所以我可以查看属性“Type”是否存在,并根据 Delphi 2005 或 2006 来决定。 有人可以看看他的 Delphi 2005 和 2006 项目并验证这种差异吗? (或者你有更好的主意吗?)

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

编辑:也许存储在那里的 GUID 是 Delphi 版本独有的?

  • 德尔福 2005:{87D03616-A4C7-4B5A-AF0F-0164EA60BC59}
  • 德尔福 2006:{CFE1BEE6-6FDE-4241-8CA5-D38D14EAA768}

不知何故我对此表示怀疑,我担心 GUID 可能代表不同的 SKU(专业/建筑师等)。但也许你可以验证一下?

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

\project\PropertyGroup\ProjectVersion

这些是我在 .dproj 文件中找到的值:

  • 德尔福 2007:不适用
  • 德尔福 2009:12.0
  • 德尔福 2010:12.0
  • 德尔福 XE:12.3
  • 德尔福 XE2:13.4

如果这些都是正确的,我可以可靠地确定 Delphi 2007、XE 和 XE2。但是如何区分 Delphi 2009 和 2010 呢?

而且,这些数字在我看来很奇怪。有谁知道德尔福的各种更新之间是否有任何区别,例如最初的 Delphi XE2 版本是否可能从 13.0 开始,并且每次更新都会增加点后的数字?但如果是这样的话,Delphi XE 是怎么搞到 12.3 的呢?

(有一个类似的问题How can I tell what version of Delphi was used to create a project,但那里的单一答案非常有限。)

以防万一其他人需要这个:我刚刚添加了一个page to the Delphi Wiki,它总结了所有答案并添加了较新的 Delphi 版本(当前为 Delphi 10.4.1)的信息。

【问题讨论】:

  • 为什么需要这个?你肯定知道你的项目是用哪个版本的 Delphi 构建的。
  • @DavidHeffernan 在下面看到我的回答。
  • 我建议遵循一个简单的命名约定来清楚地识别特定项目文件的目标 delphi 版本。例如。我们将项目文件放在一个子文件夹中。所以文件夹名称表示要使用的Delphi版本。

标签: delphi


【解决方案1】:

今天我发现这个关于 Delphi 版(标准版、专业版、企业版)的主题谷歌搜索。

无论如何,我检查了一些在我的机器中传播的 .dof 文件,并且有与古代 delphi 版本相关的事实:

如果 .dof 文件存在 -> 读取 [Directories]/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:

[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

D5:

[Excluded Packages]
$(DELPHI)\Bin\CorIde50.bpl=Borland Core IDE Package
$(DELPHI)\Bin\direct50.bpl=Borland Direct IDE Package

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 14.4:XE4 和 15.1:XE5
    • 15.3:XE5(更新 2);和 16.0:XE7
    【解决方案3】:

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

    所以答案是:

    • 如果 .dproj 文件存在 -> 读取 \project\PropertyGroup\ProjectVersion
      • 空 -> Delphi 2007
      • 12.0 -> 德尔福 2009 或 2010
      • 12.2 或 12.3 -> Delphi XE1(根据 Uwe Schuster)
      • 13.4 -> 德尔福 XE2
    • 如果 .bdsproj 文件存在 -> Delphi 2005 或 2006
    • 如果 .dof 文件存在 -> 读取 [FileVersion]\version
      • 空 -> Delphi 5(或可能更旧)
      • 6.0 -> 德尔福 6
      • 7.0 -> 德尔福 7

    不幸的是,这不允许我编写一个程序来自动启动给定项目的正确 Delphi 版本。

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

    顺便说一句:我正在研究这个问题的原因是,我有好几次不小心打开了 Delphi 2007 项目,而后来的 Delphi 版本升级了它,我不得不手动扭转这些变化。这变得非常烦人,我想通过将我自己的程序注册为 .dpr 文件的处理程序来防止它。

    【讨论】:

    • 如果您手动撤消更改,那么您需要使用修订控制
    • @DavidHeffernan:“手动”是指单击文件并在 TortoiseSVN 中选择 Revert。这并不像实际编辑文件那么困难,但仍然很烦人。顺便说一句:我现在通过将批处理文件添加到在正确 ide 中打开它的项目中解决了这个问题。
    • 单元搜索路径可能会提供有关项目链接到哪个编译器版本的提示。
    • 这是完整的答案。我打算自己创建一个启动器,直到我开始向项目目录添加一个文件,该文件表示要使用哪个 Delphi 版本。我将文件命名为 Delphi(如果只有一个平台:).txt,并在其中记录对项目所做的更改等内容。当/如果您将项目升级到较新版本的 Delphi 时,请重命名此版本控制文件,使其反映在历史记录中。
    • FWIW:现在有一个工具可以做到这一点:github.com/RRUZ/delphi-dev-shell-tools。
    【解决方案4】:

    *PROJ 文件中的版本号不受发布或更新的约束,而且并非所有版本都会上街。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2013-07-16
      • 2010-10-18
      相关资源
      最近更新 更多