Delphi 7到Delphi XE2 .res文件的问题

时间:2012-08-10 18:04:21

标签: delphi delphi-xe2

当我在Delphi XE2中打开Delphi 7项目并打开Project Option时出现错误:

"Unable to set Icon: Cannot open file "........\AppName_Icon.ico".
The system cannot find the file specified".

我还注意到项目的版本信息丢失了。 Delphi 7项目的.Res文件包含MAINICON以及存储的版本信息。 为什么Delphi XE2无法使用此.Res文件来检索MAINICON&版本信息。

此外,如果我尝试在XE2中编译应用程序,我会收到错误 -

[BRCC32 Error] MtxReq.vrc(2): file not found: MtxReq_Icon.ico

创建MTXReq.vrc文件(新文件)并删除MtxReq.res文件。

为什么会这样?我不想从.res文件中删除我的项目图标和版本设置。

有没有办法强制XE2使用.res文件而不删除它?

非常感谢任何帮助。


抱歉,我还不能发表评论(需要更多的报名点)......

Warren - 这里是对你的问题的回应(不只是删除你的.dproj文件而只保留.dpr,速度更快了吗?)

我删除了.dproj,.dproj.local 在XE2中打开.dpr并重新创建.dproj文件。 它从.res中取回了图标,但我丢失了项目版本信息。仅迁移了文件版本和产品版本信息,但丢失了所有其他版本信息。 (这是因为默认的清单文件)。 然后我尝试了我在解决方案的第1步中解释的内容。 我在记事本中打开.dproj文件删除了标签条目并重新打开.dproj文件,现在我的所有版本信息都被恢复了。这里的问题是$(BDS)\ bin \ default_app.manifest。 另外我注意到版本信息存储在.dproj文件中的标记下的标记中,一旦删除了默认的清单条目,IDE就会正确地从中获取版本密钥信息。

因此,基本上通过删除.dpr文件,我跳过了将.ico文件解压缩并添加到项目中的步骤,但是必须编辑新创建的.proj文件并删除默认清单的条目以检索版本信息。 (另一个解决方案是手动添加版本信息并保存项目。我没试过这个)

3 个答案:

答案 0 :(得分:13)

更新2015 Remy想要手动重新创建.DPROJ文件,这是一个很好的建议,应该首先考虑,即使我的答案被标记为已接受。

XE2之前的Delphi版本在编译过程中将资源文件用作INPUT和OUTPUT。例如,您的delphi 7项目图标嵌入在该文件中,您“希望delphi xe2使用”,但是,这在delphi 7中存在问题,现在在XE2中无法实现。相反,您现在将.res文件视为纯输出工件,与可执行文件相同。不要再费心检查.res文件到版本控制,也不要试图假装.res文件是永久存储图标的地方。它是由编译器自动生成的输出文件,因为它始终应该是。

如果你是一名现代开发人员,Delphi 7工作的旧方式可能会让你烦恼(这确实让我感到烦恼),因为你有一个有趣且不可解决的问题,关于如何处理版本控制:你是否检查.RES文件,或者不是吗?这两种方法都有缺点,而且.RES文件现在仅在XE2中输出工件这一事实是最好的。所以要学会忍受。

既然XE2不仅支持PC的图标,还支持Mac的图标,它必须以不同的方式处理事物,并且已经清理了它。这是您在.ICO文件中看到的问题的根源。我已经看到了完全相同的错误,我忽略了它,只是在它转换后将图标添加回项目。

将delphi 7项目(.dpr和.cfg)转换为Delphi XE2并不像各种级别的.dproj文件之间的转换那样大 - 每个版本都以Delphi 2005,2007,2009,2010开头,并且以后已经实现了dproj格式的更改。当转换这些项目出现问题时,我没有像雷米所说的那样做,因为这是浪费时间。我所做的是删除DPROJ并让它仅从.dpr文件转换 但是Remy建议从头开始有很多优点,包括你可以简化你的项目布局。

无论如何,这是你做的:

  1. 忽略错误。
  2. 自行添加图标。
  3. 继续愉快地继续,并且不要担心删除.res文件,这是有意的,并且有充分的理由。只要需要,就会创建一个新的。磁盘上.ico文件的文件名将通过使用XE2 .dproj文件的内容读取并编译到.res文件中,应该是这样。

答案 1 :(得分:5)

与往常一样,您不应让IDE将项目从旧版本转换为较新版本。转换RARELY正常工作。您应该始终在较新的IDE中创建一个新项目,然后根据需要将现有的源文件添加到其中。

答案 2 :(得分:1)

感谢大家的意见和建议。

在我提交帖子后,我尝试了这些步骤来解决.ico问题以及缺少版本问题/版本信息带来的问题:

第1步。编辑.dProj文件并删除了对标签下的default_app.manifest相关条目的引用(我的项目平台是32位) 我删除了所有标签,除了与命名空间System.Win相关的标签; Data.Win; Datasnap.Win; Web.Win; Soap.Win; Xml.Win; Bde; $(DCC_Namespace)

如果没有这个,我的应用程序总是将版本信息显示为1.0.0.0并忽略我指定的所有其他内容。

(我不确定这是否是正确的步骤,但它解决了我的版本信息问题。可能有一个更简单/另一个解决方案......)

第2步。从旧的.res文件中提取ico,命名并从项目选项中将.ico文件添加到项目中。 物理.ico文件是projects文件夹,将在源代码管理中检查(在我的情况下是VSS)。

这两个步骤让我得到了我需要的东西,然后我可以修改版本号并编译项目。 从这一点开始,没有任何问题。

这比我从D7到XE2的应用程序所需的总转换/迁移要简单得多 - Unicode转换,将定制的Raize 5组件迁移到Raize 6,Turbo Power,Virtual Tree View,Hypergrid等等等。 ...幸运的是我找到了所有这些组件的XE2版本。