Delphi 如何在使用MSBuild生成EXE时指定文件版本?

Delphi 如何在使用MSBuild生成EXE时指定文件版本?,delphi,msbuild,delphi-2010,Delphi,Msbuild,Delphi 2010,我正在尝试使用MSBuild/Delphi 2010编译EXE,我尝试了以下方法: MSBuild.exe/t:Clean;Build/p:config=Release;extraldefines=“CodeTest”/property:FileVersion=1.0.0.15“D:\MyProject\MyFile.dproj” 已生成文件,但未设置版本 到底出了什么问题?您的属性“FileVersion”在MSBuild会话中可用,但除非您的任务或目标以某种方式使用它,否则它不会用于任何用途

我正在尝试使用MSBuild/Delphi 2010编译EXE,我尝试了以下方法:

MSBuild.exe/t:Clean;Build/p:config=Release;extraldefines=“CodeTest”/property:FileVersion=1.0.0.15“D:\MyProject\MyFile.dproj”

已生成文件,但未设置版本

到底出了什么问题?

您的属性“FileVersion”在MSBuild会话中可用,但除非您的任务或目标以某种方式使用它,否则它不会用于任何用途。您需要(正如DHeffernan所说)创建代码使用的版本资源,或者使用后期编译工具将版本信息应用到exe或dll


这列出了许多用于进行后期编译的工具。

这里的主要问题是
FileVersion
“属性”是
VerInfo\u键的CSV列表的一部分,但不是属性本身

因此,我看到的解决方案是:

  • 获取
    VersInfo\u键
    属性(CSV列表)
  • 将其拆分为键=值对
  • 更改FileVersion的值=。。。配对
  • 将列表连接回CSV列表
  • 我已经使用了(注意:必须使用.NET Framework 4.0及以上版本):

  • 将要点(注意上面)放到
    lib\MSBuildTasks\Delphi.VersionInfo.targets
    文件中(在我的例子中是git子模块)

  • 添加到Delphi项目文件(例如
    Delphi project.dproj
    ):



    条件“设置了FileVersion”是为了避免在Delphi中失败,因为Delphi使用的.NET 3.5不支持内联任务(因此,只有在使用MSBuild运行时才设置FileVersion)

  • msbuild delphi-project.dproj/t:build/p:FileVersion=A.B.C.D

  • 我在Android应用程序中也使用了同样的方法(使用Delphi XE7/10)。仅使用
    VersionName
    VersionCode
    “属性”,而不是
    FileVersion
    (注意
    Import
    的条件会相应更改)


    msbuild delphi-project.dproj/t:build/p:VersionName=A.B.C.D

    我有一个Perl脚本,它作为预生成事件运行,并创建具有所需版本的版本资源。我认为“/property”不会在msbuild中设置versioninfo属性。它们用于执行诸如设置调试或发布之类的操作。请注意/p和/property只是同一命令的两种形式。谢谢大家,我最终确实使用了verpatch