Delphi 11 Alexandria编译EXE缺失VERSIONINFO资源求助
Delphi XE11中VERSIONINFO资源未嵌入可执行文件的排查方案
问题背景
已为项目添加VERSIONINFO资源并勾选「Include version information in project」选项,但编译后的可执行文件中完全缺失该资源;空白VCL窗体应用按相同配置(添加foobar键值对、Locale ID设为$040E)可正常生成VERSIONINFO,但原项目排除GExperts/DDevExtensions等第三方工具、UPX压缩、重新从D7导入并手动配置后,问题仍存在,怀疑.dproj或隐藏资源引用异常。
排查与解决步骤
1. 检查.dproj文件的配置细节
- 用文本编辑器打开
.dproj,查找<VersionInfo>节点,确认<IncludeVerInfo>True</IncludeVerInfo>存在且未被覆盖;同时检查<ResourceIncludes>节点,确认无冲突的资源路径或重复的VERSIONINFO引用。 - 排查
<ExcludedFiles>、<ExcludedResources>节点,确认VERSIONINFO资源未被意外排除。
2. 排查项目资源文件冲突
- 检查项目中所有
.rc、.res文件,确认不存在多个VERSIONINFO定义(重复定义会导致资源编译时被覆盖或丢弃)。 - 手动执行资源编译命令验证:运行
brcc32 yourproject.rc(替换为实际资源文件名),查看输出是否有语法错误(比如Locale ID格式错误、键值对定义异常)。
3. 核对编译配置的一致性
- 针对所有平台(Win32/Win64)和配置(Debug/Release),逐个确认「Include version information in project」选项已勾选,且VERSIONINFO的属性(Locale ID、键值对)配置一致。
- 查看编译选项中的「Resource compiler」参数,确认无
-i路径错误、-d宏定义干扰资源编译的情况。
4. 清理编译缓存后重新编译
- 删除项目输出目录(如
Win32\Debug、Win64\Release)及所有.dcu、.res、.obj中间文件,执行全量编译,避免缓存文件导致资源未更新。
5. 定位隐藏资源引用
- 检查项目中的
{$R}编译指令,确认无未在IDE中显示的资源文件引用(如{$R 'hidden.res' 'hidden.rc'})。 - 用Resource Hacker打开项目依赖的第三方
.dll、.res文件,确认无冲突的VERSIONINFO资源导致合并异常。
验证方法
- 将原项目的VERSIONINFO资源导出(IDE中右键VERSIONINFO→Export),导入到空白VCL项目编译,验证资源配置本身是否有效。
- 逐步移除原项目中的非核心文件(自定义组件、第三方资源),每次编译后检查VERSIONINFO是否存在,定位问题根源。
内容的提问来源于stack exchange,提问作者malom
相关产品推荐
相关产品推荐

