【问题标题】:How to specify File Version when building EXE using MSBuild?使用 MSBuild 构建 EXE 时如何指定文件版本?
【发布时间】:2012-04-20 17:50:11
【问题描述】:

我正在尝试使用 MSBuild/Delphi 2010 编译一个 EXE,我试过这个:

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

文件已构建,但版本未设置

到底怎么了?

【问题讨论】:

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

标签: delphi msbuild delphi-2010


【解决方案1】:

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

StackOverflow article 列出了许多用于执行后编译操作的工具。

【讨论】:

    【解决方案2】:

    这里的主要问题是FileVersion“属性”是VerInfo_Keys属性的CSV列表的一部分,而不是属性本身。

    所以,我看到的解决方案是:

    1. 获取VersInfo_Keys 属性(CSV 列表)
    2. 将其拆分为 Key=Value 对
    3. 更改 FileVersion=... 对的值
    4. 将列表加入到 CSV 列表。

    我有 implemented 这个 MSBuild Inline Task (注意:必须使用 .NET Framework 4.0 及更高版本):

    1. 将要点(如上所述)放入lib\MSBuildTasks\Delphi.VersionInfo.targets 文件(在我的情况下为 git 子模块)

    2. 添加到 Delphi 项目文件(比如 delphi-project.dproj):

      <Import Project="lib\MSBuildTasks\Delphi.VersionInfo.targets" Condition="$(FileVersion)!='' and Exists('lib\MSBuildTasks\Delphi.VersionInfo.targets')"/>

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

    3. 运行

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

    我用于 Android 应用程序的相同(使用 Delphi XE7/10 Seattle)。仅使用VersionNameVersionCode“属性”而不是FileVersion(注意Import 的条件已适当更改)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多