6

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

"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 文件而不是删除它?

任何帮助将不胜感激。


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

沃伦- 这里是对您问题的回应(不只是删除您的 .dproj 文件并仅保留 .dpr ,更快吗?)

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

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

4

3 回答 3

13

2015 年更新Remy 手动重新创建 .DPROJ 文件的想法是极好的建议,应该首先考虑,即使我的回答被标记为已接受。

XE2 之前的 Delphi 版本在编译过程中使用资源文件作为 INPUT 和 OUTPUT。例如,您的 delphi 7 项目图标嵌入在该 .res 文件中,您“希望 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 格式的变化。当转换这些项目出现问题时,我不会按照 Remy 的建议去做,因为这是在浪费时间。我所做的是删除 DPROJ 并让它仅从 .dpr 文件转换。
但是 Remy 的建议从头开始有很多好处,包括您可以简化项目布局。

无论如何,这就是你要做的:

  1. 忽略错误。
  2. 添加图标以投射自己。
  3. 继续愉快地前进,不要担心 .res 文件的删除,这是故意的,并且有充分的理由。将在需要时创建一个新的。磁盘上 .ico 文件的文件名将使用 XE2 .dproj 文件的内容读取并编译到 .res 文件中,应该是这样。
于 2012-08-11T19:17:31.987 回答
5

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

于 2012-08-10T20:17:04.937 回答
1

感谢大家的意见和建议。

提交帖子后,我尝试了以下步骤来解决 .ico 问题和缺少的版本问题/版本信息遗留问题:

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

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

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

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

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

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

于 2012-08-13T13:35:18.760 回答