Delphi 中.dproj 文件解析(二、详细解析)

上一篇 介绍了Delphi 的各个版本,本文开始分析.dproj文件。.dproj是一个XML文件,里边包含了我们在Delphi开发环境中对项目设置的所有参数(位于IDE:Project -> Options 中),包括并不限于:

  1. 版本信息;

  1. 图标信息;

  1. 编译生成的目标文件存放路径;

  1. 编译目标平台(windows,android,ios, .....);

  1. 配置信息(Debug,Release)

.....

由于官方没有提供任何关于.dproj文档的说明,本文是根据Delphi 各个项目对比分析的结果,如有任何疏漏甚至错误,欢迎交流指正!所有分析基于Delphi 11.2

对于.dproj 官方并没有给出任何文档介绍,那么为什么要分析研究.dproj文件呢,目的就是想实现delphi程序的自动构建,自动构建,自动构建

由于.dproj涉及的项目参数非常多,对于自动构建,我们只需要上面的5个参数信息就可以,其他的参数都使用项目原来的。

一、.dproj 文件结构

下面是一个缩减了的.dproj 文件结构框架:

//整体使用 Project 节点,所有内容在这个节点中
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    //第一个 PropertyGroup 节点,不包含任何 Attributes 属性,包含框架VCL/FMX、配置Relase/Debug、平台Win32/Win64/Andoird...、程序类型Application/Dll等主要信息
    <PropertyGroup> 
        <ProjectGuid>{A524FB1B-A9A8-4FB6-A680-1D05B7B5E1BF}</ProjectGuid>
        <ProjectVersion>19.5</ProjectVersion>
        <FrameworkType>VCL</FrameworkType>
        <Base>True</Base>
        <Config Condition="'$(Config)'==''">Release</Config>
        <Platform Condition="'$(Platform)'==''">Win64</Platform>
        <TargetedPlatforms>3</TargetedPlatforms>
        <AppType>Application</AppType>
        <MainSource>VCL_DEMO.dpr</MainSource>
    </PropertyGroup>
    
    //随后包含n个PropertyGroup节点,含有不同Condition属性(Attributes),包含程序的版本,图标等信息
    <PropertyGroup Condition="xxx">
        ...
    </PropertyGroup>

    ....

    //包含一个ItemGroup节点,定义一些本工程需要的属性参数,例如Cfg_1对应Debug,Cfg_2对应Release
    <ItemGroup>
        ...
    </ItemGroup>
    
    //包含一个ProjectExtensions节点,内有n多项目参数节点
    <ProjectExtensions>
        ...
    </ProjectExtensions>
    
    //包含n个Import节点,定义项目需要的一些文件
    <Import Project=" xxx "/>

</Project>
二、.dproj 文件分析
1). 通用参数节点

第一个 <PropertyGroup> 节点,包含有项目的通用设置参数。这个节点特点是:

  1. 该节点是整个项目节点 <Project>的第一个子节点;

  1. 该节点是唯一没有包含任何 Attributes 属性的<PropertyGroup> 节点;

  1. 是唯一包含<ProjectGuid>子节点的节点;

序号

子节点

含义

1

<ProjectGuid>

包含Delphi项目的Guid,每个项目是唯一的,如果在一个项目组中,出现两个ProjectGuid 一样,系统会提示,要求一个项目必须更改。正常情况,Delphi开发环境IDE创建的项目会自动生成这个节点内容,并且保证每个项目是唯一的。

2

<ProjectVersion>

表示Delphi的版本,和实际Delphi的发行版本是不一样的。例如上面样例数据为19.5,就表示是Delphi 11.2版本开发的。具体的版本对应关系请参见.dproj 版本对应表

3

<FrameworkType>

表示Delphi项目框架,值是 VCLFMX或者None(dll和控制台程序该值为None)。

4

<Base>

表示.dproj文件中是否使用 Base 参数,默认是True,表示使用。该参数不要修改!

5

<Config>

表示Delphi项目中的Build Configurations 配置。Debug或者Release

6

<Platform>

表示Delphi项目的目标平台。

对应的参数值:Android、Android64、iOSDevice64、iOSSimARM64、Linux64、OSX64、OSXARM64、Win32、Win64

7

<AppType>

表示是应用程序还是控制台程序或者是DLL等。参数值如下:

  1. Application : 普通的程序(Exe、Apk等)

  1. Library : DLL动态链接库

  1. Console :控制台程序

  1. Package : 表示包项目,例如控件等

8

<MainSource>

工程文件名称,主工程源文件名称,后缀.dpr。对于包项目,没有这个节点。

2). <ItemGroup>节点说明

该节点定义整个项目中使用的源文件,项目Debug和Release的宏变量定义。

序号

子节点

含义

1

<DCCReference>

定义本工程中需要的源文件,每个源文件对应一个这样的节点,该节点内包含不同的字节点,用来标识本源文件的属性,例如是否是Form单元等。

2

<BuildConfiguration>

分别定义了基本的(Base)、调试(Debug)、发行(Release)等宏变量。默认值:

  1. Base : Base

  1. Debug :Cfg_1

  1. Release:Cfg_2

节点样例:

<ItemGroup>
        <DelphiCompile Include="$(MainSource)">
            <MainSource>MainSource</MainSource>
        </DelphiCompile>
        <DCCReference Include="uMainForm.pas">
            <Form>Form1</Form>
            <FormType>dfm</FormType>
        </DCCReference>
        <BuildConfiguration Include="Base">
            <Key>Base</Key>
        </BuildConfiguration>
        <BuildConfiguration Include="Debug">
            <Key>Cfg_1</Key>
            <CfgParent>Base</CfgParent>
        </BuildConfiguration>
        <BuildConfiguration Include="Release">
            <Key>Cfg_2</Key>
            <CfgParent>Base</CfgParent>
        </BuildConfiguration>
    </ItemGroup>

3). <PropertyGroup Condition=" xxx "> 节点说明

对于 Condition属性不同的值定义不同的参数。

序号

Conditionxxx

含义

1

'$(Base)'!=''

表示项目的默认配置,包括以下节点:

  1. DCC_DcuOutput : Dcu 输出路径

  1. DCC_ExeOutput :Exe 输出路径

  1. Icon_MainIcon :主程序Icon

如果是FMX框架,还包括权限参数的定义。不过自动构建一般不修改这些参数,由IDE生成。

2

$(Base_Win32)'!=''

表示Win32的默认基本配置,VCL框架默认是这个平台,里边包含默认的版本信息等。

3

'$(Base_Win64)'!=''

表示Win64的默认基本配置,VCL框架有这个平台,如果在IDE界面没有增加这个平台,只是有这个节点的简单信息,并没有详细信息。

4

'$(Cfg_1)'!=''

Debug模式的默认配置。

5

'$(Cfg_2)'!=''

Release模式的默认配置

6

'$(Cfg_1_Win32)'!=''

Debug模式下的Win32配置

7

'$(Cfg_2_Win32)'!=''

Release模式下的Win32配置

8

'$(Cfg_1_Win64)'!=''

Debug模式下的Win64配置

9

'$(Cfg_2_Win64)'!=''

Release模式下的Win64配置

10

'$(Base_Android)'!=''

表示Android32的默认基本配置,FMX框架支持。

11

'$(Base_Android64)'!=''

表示Android64的默认基本配置,FMX框架支持。

13

'$(Base_iOSDevice64)'!=''

表示IOS64设备的默认基本配置,FMX框架支持。IOS已经放弃32位,所以只有64位。

14

'$(Base_iOSSimARM64)'!=''

表示IOS64设备的ARM模拟器的默认基本配置,FMX框架支持。

15

'$(Base_Linux64)'!=''

表示Linux64的默认配置

17

'$(Base_OSX64)'!=''

表示Mac OS 在intel平台上的默认配置

18

'$(Base_OSXARM64)'!=''

表示Mac OS 在Arm平台上的默认配置

19

.....

.....

对于Delphi IDE创建好的.dproj文件,如果我们需要修改项目工程的版本信息和图标,只需要关注修改一个<PropertyGroup Condition=" xxx ">节点,具体是那个节点呢?

需要根据Conifg,PlatForm确定。

例如,当我们配置Config是Debug,开发的平台PlatForm是Win64。那么我们就需要修改Condition 等于 '$(Cfg_1_Win64)'!='' 的节点。

4). 举例说明 '$(Cfg_1_Win64)'!='' 节点
<PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
        <AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
        <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
        <VerInfo_MajorVer>8</VerInfo_MajorVer>
        <VerInfo_MinorVer>8</VerInfo_MinorVer>
        <VerInfo_Release>8</VerInfo_Release>
        <VerInfo_Build>8</VerInfo_Build>
        <VerInfo_Locale>1033</VerInfo_Locale>
        <VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=8.8.8.8;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=8.8.8.8;Comments=</VerInfo_Keys>
        <DCC_ExeOutput>.\$(Platform)\$(Config)\Win64_DebugEXE</DCC_ExeOutput>
        <DCC_DcuOutput>.\$(Platform)\$(Config)\Win64_DebugDCU</DCC_DcuOutput>
        <Icon_MainIcon>VCL_DEMO_Icon.ico</Icon_MainIcon>
    </PropertyGroup>

如果需要在编译前修改版本以及图标,就在这个节点中修改。

序号

节点

说明

1

<VerInfo_Keys>

包含的版本信息,对应IDE如下:

2

<DCC_ExeOutput>

<DCC_DcuOutput>

Exe的输出路径

3

<Icon_MainIcon>

程序图标

三、总结
  1. .dproj文件是项目入口总控文件,由Delphi开发环境创建的,不清楚不要轻易修改;

  1. 在Delphi的开发环境已经都编译通过,然后需要自动构建,发布版本、图标等,就可以动态修改.dproj。

  1. 对于自动构建,需要修改的也就是版本信息和图标,其他不用动。

  1. 以上分析仅是个人分析结果,疏漏和错误必然存在,希望有共同需求的的朋友一起完善,需要时可以交流。

今天是2022年大年30,明天就是2023年,兔年!愿大家在新的一年身体健康,喜乐平安!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海纳老吴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值