【问题标题】:Delphi 7 to Delphi XE2 .res file issueDelphi 7 到 Delphi XE2 .res 文件问题
【发布时间】:2012-08-08 01:38:39
【问题描述】:

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

任何帮助将不胜感激。


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

Warren - 这里是对您的问题的答复(不只是删除您的 .dproj 文件并仅保留 .dpr 会更快吗?)

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

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

【问题讨论】:

    标签: delphi delphi-xe2


    【解决方案1】:

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

    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 开始,以及Onwards 实施了 dproj 格式的更改。当转换这些项目出现问题时,我不会按照 Remy 的建议去做,因为这是浪费时间。我所做的是删除 DPROJ 并让它仅从 .dpr 文件转换。
    但 Remy 的建议从头开始有很多好处,包括您可以简化项目布局。

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

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

    【讨论】:

      【解决方案2】:

      感谢大家的意见和建议。

      提交帖子后,我尝试了以下步骤来解决 .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 文件是项目文件夹,将在源代码控制中检查(在我的情况下为 VSS)。

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

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

      【讨论】:

      • 不只是删除您的 .dproj 文件并仅保留 .dpr 会更快吗?
      【解决方案3】:

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

      【讨论】:

      • 你为什么这么说?让 ide 进行转换我从来没有遇到过任何问题。
      • 那么认为自己很幸运,因为许多用户确实遇到了问题。多年来,Borland/CodeGear/Embarcadero 论坛发布了很多关于项目升级问题的投诉/担忧。在许多情况下,它只是无法正常工作。大多数 TeamB 成员(包括我自己)一遍又一遍地告诉论坛用户同样的事情——我在这里说的同样的事情。最好不要升级项目,你只是不知道IDE可能会出错。改为创建一个新项目。
      • 我已经多次看到这些问题。我只是不同意删除 .dpr 和 .dpk。我只发现您需要删除任何 .dproj 文件。从.dpr 升级加上.cfg 或.dof 比从一个.dproj 级别升级到另一个.dproj 级别更无缝。 OP 提到的 .ico 文件错误是这种普遍趋势的罕见反例。但该错误大多是无害的,只是意味着您应该手动插入不同的 .ico 文件,因为 .res 到 .ico 文件的提取失败。如果您不再拥有普通的 .ico 文件,那就太痛苦了。
      • 这个建议实际上是 2015 年比 2012 年更好的建议。DPROJ 文件格式有很多变化,升级过程可能会导致一些真正奇怪的问题。我 2012 年的建议与我现在的看法不同;不要升级 DPROJ 文件,重新创建它们,正如 Remy 所建议的那样,即使从 .DPR 重新开始也可以使项目更清晰、更易读。
      • @Warren 在 DTokyo 中,这些奇怪的行为之一是某些设置,特别是版本信息,会暂时从剩余的 .dof 文件加载到 IDE 中。即使您删除 .dproj 文件也会发生这种情况!我第一次看到这个我以为我产生了幻觉。删除 .dproj,打开 dpr,转到选项/版本信息。旧版本号将从 .dof 中提取。幸运的是,它们在点击离开然后点击返回后消失了,但谁知道还有什么意外地加载了。我可以复制这个。我什至不知道我的项目文件夹中有一个 .dof 文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      相关资源
      最近更新 更多