Delphi 的工程文件 xxx.dproj是一个标准的XML文本文件,从Delphi 2007开始使用.dproj后缀的工程文件,一直到最新的Delphi 11.2都在使用。遗憾的是,早期的版本并不向前兼容,比如用Delphi 2007版本打开一个Delphi XE版本创建的 .dproj 工程文件会报错。
为了解析 .dproj 文件,必须先明白Delphi的各个版本。
Delphi 是使用MsBuild 进行构建的,所以.dproj 是一个标准的MsBuild 项目文件,具体的资料请参见:MSBuild - MSBuild | Microsoft Learn
一、Delphi版本说明
日常大家说的Delphi的版本,是Delphi的发行版本,比如Delphi XE、Delphi 10.1、Delphi 11.2等等,但是实际Delphi 还有很多实际使用的版本代号,与实际的发行版本并不一样。
.dproj 中的版本代号:
在.dproj文件中,版本代号完全是另外一套;在进行自动化构建时有参考使用,一般不需要使用,当然如果不知道当前.dproj是使用那个Delphi版本创建,可以通过这个版本对应查看到Delphi 的版本。这个 .dproj 版本似乎在Delphi的帮助中无法查询到。
Delphi 产品版本(Product Version):
与发行版本对应,但不一致。
Delphi的包版本(Package Version):
与发行版本对应,但不一致。产品版本 X 10 就是包版本。有时Delphi环境会出现 xxx240.bpl错误,其中这个240就表示的是包版本,对应的是Delphi 10.1(Berlin)。
Delphi编译版本(Compiler Version):
与发行版本对应,但不一致;这个比较关键,主要是在编程中会经常使用,比如判断不同的Delphi版本分别进行不同的处理就需要使用这个版本。
{$IF CompilerVersion >= 34} //10.4 以后的版本需要,Berlin版本不需要这个
System.Permissions,
FMX.DialogService,
{$ENDIF}
//下面程序中显示当前Delphi的编译版本
Edit1.Text := FloatToStr(System.CompilerVersion);
安装版本(Install Version):
表示Delphi 安装路径中的版本号,就是Delphi安装(C:\Program Files (x86)\Embarcadero\Studio)目录后面的数字序号。例如:22.0 就表示的是Delphi 11,19.0表示Delphi 10.2。完整的路径如下:
C:\Program Files (x86)\Embarcadero\Studio\22.0
二、Delphi各个版本对应表
对于Delphi 的各个版本,在Delphi 帮助中,查询versions of compilers 即可找到全部版本对应表,但是不包含.dproj的版本对应。
Delphi conditional VER<nnn> | Product | Product Version | Package Version | Compiler Version |
VER350 | Delphi 11.0 Alexandria | 28 | 280 | 35 |
VER340 | Delphi 10.4 Sydney | 27 | 270 | 34 |
VER330 | Delphi 10.3 Rio | 26 | 260 | 33 |
VER320 | Delphi 10.2 Tokyo | 25 | 250 | 32 |
VER310 | Delphi 10.1 Berlin | 24 | 240 | 31 |
VER300 | Delphi 10 Seattle | 23 | 230 | 30 |
VER290 | Delphi XE8 | 22 | 220 | 29 |
VER280 | Delphi XE7 | 21 | 210 | 28 |
VER270 | Delphi XE6 | 20 | 200 | 27 |
VER260 | Delphi XE5 | 19 | 190 | 26 |
VER250 | Delphi XE4 | 18 | 180 | 25 |
VER240 | Delphi XE3 | 17 | 170 | 24 |
VER230 | Delphi XE2 | 16 | 160,161 | 23 |
VER220 | Delphi XE | 15 | 150 | 22 |
VER210 | Delphi 2010 | 14 | 140 | 21 |
VER200 | Delphi 2009 | 12 | 120 | 20 |
VER190 | Delphi 2007 for .Net | 11 | 110 | 19 |
VER180 or VER185 | Delphi 2007 | 11 | 110 | 18.5 |
VER180 | Delphi 2006 | 10 | 100 | 18 |
VER170 | Delphi 2005 | 9 | 90 | 17 |
VER160 | Delphi 8 for .Net | 8 | 80 | 16 |
VER150 | Delphi 7 (and 7.1) | 7 | 70 | 15 |
三、.dproj 版本对应表
Product | .dproj 内版本 | Update 1 | Update 2 | Update 3 |
Delphi 11.0 Alexandria | 19.3 | 19.4 | 19.5 | |
Delphi 10.4 Sydney | 19.0 | 19.1 | 19.2 | |
Delphi 10.3 Rio | 18.5 | 18.6 | 18.7 | 18.8 |
Delphi 10.2 Tokyo | 18.2 | 18.3 | 18.4 | |
Delphi 10.1 Berlin | 18.1 | 18.2 | ||
Delphi 10 Seattle | 18.0 | 18.1 | ||
Delphi XE8 | 17.1 or 17.2 | |||
Delphi XE7 | 16.0 | 16.1 | ||
Delphi XE6 | 15.4 | |||
Delphi XE5 | 15.1 or 15.3 | |||
Delphi XE4 | 14.4 | 14.6 | ||
Delphi XE3 | 14.3 | 14.4 | ||
Delphi XE2 | 13.4 | |||
Delphi XE | 12.2 | 12.3 | ||
Delphi 2010 | 12.0 | |||
Delphi 2009 | 12.0 | |||
Delphi 2007 | NA |
经过测试,Delphi 10.1 Berlin 和 Delphi 11.2 Alexandria 可以互相打开对方创建的VCL工程文件。
上面在 .dproj 中的 XML 样例如下(本样例为Delphi 11.2生成的,注意ProjectVersion是 19.5):
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{A524FB1B-A9A8-4FB6-A680-1D05B7B5E1BF}</ProjectGuid>
<ProjectVersion>19.5</ProjectVersion>
<FrameworkType>VCL</FrameworkType>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win64</Platform>
<TargetedPlatforms>3</TargetedPlatforms>
<AppType>Application</AppType>
<MainSource>VCL_DEMO.dpr</MainSource>
</PropertyGroup>