【发布时间】:2013-07-16 23:58:29
【问题描述】:
我想在 Delphi 项目中手动设置程序版本,无需 IDE。
当我像这样更改*.dproj 文件时:
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">True</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">2</VersionInfo>
<VersionInfo Name="Release">3</VersionInfo>
<VersionInfo Name="Build">456</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1049</VersionInfo>
<VersionInfo Name="CodePage">1251</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
...
<VersionInfoKeys Name="FileVersion">1.2.3.456</VersionInfoKeys>
...
<VersionInfoKeys Name="ProductVersion">1.2.3.456</VersionInfoKeys>
</VersionInfoKeys>
然后使用 MSBuild 通过CMD 构建项目:
call rsvars.bat
MSBuild.exe blabla.dproj /p:configuration=release
我得到 *.exe 文件,文件属性中的版本信息为空
但是当我在 IDE 中设置版本并使用相同的 MSBuild 调用进行构建时,一切正常。 *.exe 有版本信息
问题:为什么我使用相同的*.dproj 文件会得到不同的结果?
【问题讨论】:
-
我认为您应该更改 RC/RES 文件,因为 VERSIONINFO 是 Windows PE-EXE 资源的一部分。我认为 DPROJ 文件仅包含由 delphi 导出到 RC 文件中的值。因此,您应该阅读 MSBuild 是否编译资源(AFARIR 编译资源并且第一个命令调用 brc.exe),如果编译编译 - 编辑文本
ProjectName.RC,如果没有编译二进制ProjectName.RESPS。请编辑您的问题并在问题文本下方添加带有delphi版本的TAG -
您不需要使用
/t:Rebuild强制完全重建吗? -
重建没有帮助
-
使用 SysInternals Process Monitor 在编译期间跟踪哪些文件是红色的。您应该看到链接到 EXE 的 RC 或 RES 文件,并且这些文件应该包含 VERSIONINFO 资源
-
虽然它与 MSBuild 无关,但您可以使用 this 之类的东西,而不是使用 IDE 的内置版本支持,然后使用预构建事件来更新它。将资源脚本正确添加到代码中,然后会在 Delphi 构建过程中自动为您重新编译它。
标签: delphi msbuild ide delphi-2007 versioninfo