1

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

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

文件已构建但未设置版本

到底怎么了?

4

2 回答 2

3

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

这篇StackOverflow 文章列出了许多用于执行后编译操作的工具。

于 2012-04-20T18:39:26.053 回答
0

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

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

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

我已经使用MSBuild 内联任务实现了这一点(注意:必须使用 .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)。使用JustVersionNameVersionCode“属性”而不是FileVersion(NBImport的条件已适当更改)。

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

于 2016-07-29T08:22:43.907 回答