如何使用MSBuild构建EXE时指定文件版本?

时间:2012-04-20 17:50:12

标签: delphi msbuild delphi-2010

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

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

已构建文件但未设置版本

无论如何都有什么不对?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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

  1. 选择VersInfo_Keys属性(CSV列表)
  2. 将其拆分为Key = Value pair
  3. 更改FileVersion = ... pair
  4. 的值
  5. 将列表加入CSV列表。
  6. implemented这个MSBuild Inline Task(必须使用N.B。:.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')"/>

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

    3. 运行

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

    4. 我用于Android应用程序(使用Delphi XE7 / 10 Seattle)。只需VersionNameVersionCode&#34;属性&#34;使用而不是FileVersion(N.B。Import的条件已适当更改。

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