如何使用MSBuild构建EXE时指定文件版本?
我试图编译使用的MSBuild /德尔福2010的EXE,我尝试这样做:如何使用MSBuild构建EXE时指定文件版本?
MSBuild.exe /吨:清洁;建立/ P:配置=释放; ExtraDefines = “CodeTest”/属性:文件版本= 1.0.0.15 “d:\ MyProject的\ MyFile.dproj”
文件是内置版本,但没有设置
有什么不对呢?
你的财产“文件版本”是可用的MSBuild会话中,但除非你有一个使用它在某种程度上任务或目标,它没有被用于任何东西。您需要(如DHeffernan所说)创建代码使用的版本资源,或者使用后期编译工具将版本信息应用于您的exe或dll。
这个* article列出了一些工具来做后编译的事情。
这里的主要问题是FileVersion
“属性”是VerInfo_Keys
属性的CSV列表的一部分,但不是属性本身。
所以,这被看作是对我的解决办法是:
- 采取
VersInfo_Keys
财产(CSV列表) - 拆分它主要= value对
- 变化值文件版本= ...对
- 加入列表回到CSV列表。
我已经implemented这与MSBuild Inline Task(注:.NET框架4.0及以上必须使用):
- 把要点(上注意到)到
lib\MSBuildTasks\Delphi.VersionInfo.targets
文件(git的子模块在我情况) -
添加到德尔福项目文件(比如
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一起运行时设置)。 -
运行
msbuild delphi-project.dproj /t:build /p:FileVersion=A.B.C.D
同样我使用的Android应用(用Delphi XE7/10西雅图)。只需使用VersionName
和VersionCode
使用“属性”而不是FileVersion
(N.B. Import
的条件适当更改)。
msbuild delphi-project.dproj /t:build /p:VersionName=A.B.C.D
我有一个运行作为预生成事件,并创建具有所需版本的版本资源Perl脚本。 – 2012-04-20 18:21:23
我不认为“/ property”在MSBUILD中设置了一个versioninfo属性。它们被用来做一些事情,比如设置Debug或Release。请注意,/ p和/属性只是同一个命令的两种形式。 – 2012-04-20 18:30:42
谢谢你们,我确实结束了使用verpatch – TheDude 2012-04-20 22:00:04