2012-04-20 130 views
1

我试图编译使用的MSBuild /德尔福2010的EXE,我尝试这样做:如何使用MSBuild构建EXE时指定文件版本?

MSBuild.exe /吨:清洁;建立/ P:配置=释放; ExtraDefines = “CodeTest”/属性:文件版本= 1.0.0.15 “d:\ MyProject的\ MyFile.dproj”

文件是内置版本,但没有设置

有什么不对呢?

+1

我有一个运行作为预生成事件,并创建具有所需版本的版本资源Perl脚本。 – 2012-04-20 18:21:23

+2

我不认为“/ property”在MSBUILD中设置了一个versioninfo属性。它们被用来做一些事情,比如设置Debug或Release。请注意,/ p和/属性只是同一个命令的两种形式。 – 2012-04-20 18:30:42

+0

谢谢你们,我确实结束了使用verpatch – TheDude 2012-04-20 22:00:04

回答

3

你的财产“文件版本”是可用的MSBuild会话中,但除非你有一个使用它在某种程度上任务或目标,它没有被用于任何东西。您需要(如DHeffernan所说)创建代码使用的版本资源,或者使用后期编译工具将版本信息应用于您的exe或dll。

这个StackOverflow article列出了一些工具来做后编译的事情。

0

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

所以,这被看作是对我的解决办法是:

  1. 采取VersInfo_Keys财产(CSV列表)
  2. 拆分它主要= value对
  3. 变化值文件版本= ...对
  4. 加入列表回到CSV列表。

我已经implemented这与MSBuild Inline Task(注:.NET框架4.0及以上必须使用):

  1. 把要点(上注意到)到lib\MSBuildTasks\Delphi.VersionInfo.targets文件(git的子模块在我情况)
  2. 添加到德尔福项目文件(比如delphi-project.dproj):

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

    条件“使用Filever sion设置“是为了避免Delphi中的失败,因为后者使用不支持内联任务的.NET 3.5(所以,FileVersion仅在与MSBuild一起运行时设置)。

  3. 运行

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

同样我使用的Android应用(用Delphi XE7/10西雅图)。只需使用VersionNameVersionCode使用“属性”而不是FileVersion(N.B. Import的条件适当更改)。

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