在一个新的VCL应用程序中,编译和构建操作会产生相同的二进制和映射文件(即使“在项目中包括版本信息”选项已关闭,.exe文件末尾可能会有轻微差异-已经讨论过)。映射文件是一模一样的。但是,当我添加任何第三方组件时,由Build和Compile产生的二进制和映射(!)文件明显不同!
在两个Delphi版本上进行测试: - 版本7.0(Build 8.1) - CodeGear™ RAD Studio 2007 Version 11.0.2902.10471 (+December 2007 Update)
重现步骤:
1. 创建新的VCL应用程序。可能添加任何本机Delphi组件(我尝试了来自标准、附加、Win32和系统选项卡的所有组件)。 2. 在项目选项的链接器选项卡上打开详细映射文件。 3. 构建项目。 4. 将输出的.exe和.map文件重命名(例如:project1.exe重命名为project1b.exe,project1.map重命名为project1b.map)。 5. 编译项目。 6. 将输出的.exe和.map文件重命名(例如:project1.exe重命名为project1c.exe,project1.map重命名为project1c.map)。 7. 比较步骤4和6中的文件(我使用WinMerge 2.12.4.0)。
我们得到略有不同的.exe文件和完全相同的.map文件。然后,如果我们再次重复所有步骤,但在项目中使用第三方组件(我尝试了ODAC、DOA、DevExpress和selfmade),我们会得到更多不同的.exe和不同的.map文件。
为什么?有什么建议吗?
更新 关于我如何发现这个问题以及为什么它引起我的兴趣的一些信息: 项目是通过MSBuild从简单脚本构建的。当在项目中添加了ITE(具有资源的dll)翻译时,我发现当项目被构建(从脚本或IDE中)时 - 翻译版本工作不正常 - 某些文本在按钮、标签等上获取了错误的位置(字面上来自另一个按钮、标签)。当从IDE编译项目时 - 一切都好。所以我开始比较Build和Compile输出...
在两个Delphi版本上进行测试: - 版本7.0(Build 8.1) - CodeGear™ RAD Studio 2007 Version 11.0.2902.10471 (+December 2007 Update)
重现步骤:
1. 创建新的VCL应用程序。可能添加任何本机Delphi组件(我尝试了来自标准、附加、Win32和系统选项卡的所有组件)。 2. 在项目选项的链接器选项卡上打开详细映射文件。 3. 构建项目。 4. 将输出的.exe和.map文件重命名(例如:project1.exe重命名为project1b.exe,project1.map重命名为project1b.map)。 5. 编译项目。 6. 将输出的.exe和.map文件重命名(例如:project1.exe重命名为project1c.exe,project1.map重命名为project1c.map)。 7. 比较步骤4和6中的文件(我使用WinMerge 2.12.4.0)。
我们得到略有不同的.exe文件和完全相同的.map文件。然后,如果我们再次重复所有步骤,但在项目中使用第三方组件(我尝试了ODAC、DOA、DevExpress和selfmade),我们会得到更多不同的.exe和不同的.map文件。
为什么?有什么建议吗?
更新 关于我如何发现这个问题以及为什么它引起我的兴趣的一些信息: 项目是通过MSBuild从简单脚本构建的。当在项目中添加了ITE(具有资源的dll)翻译时,我发现当项目被构建(从脚本或IDE中)时 - 翻译版本工作不正常 - 某些文本在按钮、标签等上获取了错误的位置(字面上来自另一个按钮、标签)。当从IDE编译项目时 - 一切都好。所以我开始比较Build和Compile输出...
*Build*
е’ҢBuild
з”ҹжҲҗдёҚеҗҢзҡ„дәҢиҝӣеҲ¶ж–Ү件гҖӮиҝҷдёҺзј–иҜ‘е’Ңжһ„е»әзҡ„еҢәеҲ«ж— е…ігҖӮ - Rob Kennedy