我正在尝试使用 MSBuild/Delphi 2010 编译 EXE,我试过这个:
MSBuild.exe /t:Clean;Build /p:config=Release;ExtraDefines="CodeTest" /property:FileVersion=1.0.0.15 "D:\MyProject\MyFile.dproj"
文件已构建但未设置版本
到底怎么了?
我正在尝试使用 MSBuild/Delphi 2010 编译 EXE,我试过这个:
MSBuild.exe /t:Clean;Build /p:config=Release;ExtraDefines="CodeTest" /property:FileVersion=1.0.0.15 "D:\MyProject\MyFile.dproj"
文件已构建但未设置版本
到底怎么了?
您的属性“FileVersion”在 MSBuild 会话中可用,但除非您有任务或目标以某种方式使用它,否则它不会用于任何事情。您要么需要(如 DHeffernan 所说)创建代码使用的版本资源,要么使用后编译工具将版本信息应用于您的 exe 或 dll。
这篇StackOverflow 文章列出了许多用于执行后编译操作的工具。
这里的主要问题是FileVersion
“属性”是 CSV 属性列表的一部分,VerInfo_Keys
而不是属性本身。
所以,我看到的解决方案是:
VersInfo_Keys
财产(CSV 列表)我已经使用MSBuild 内联任务实现了这一点(注意:必须使用 .NET Framework 4.0 及更高版本):
将要点(如上所述)放入lib\MSBuildTasks\Delphi.VersionInfo.targets
文件(在我的情况下为 git 子模块)
添加到 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)。
跑
msbuild delphi-project.dproj /t:build /p:FileVersion=A.B.C.D
我用于 Android 应用程序的相同(使用 Delphi XE7/10 Seattle)。使用JustVersionName
和VersionCode
“属性”而不是FileVersion
(NBImport
的条件已适当更改)。
msbuild delphi-project.dproj /t:build /p:VersionName=A.B.C.D