DCC提示:H2161警告:重复资源:类型24(用户定义),ID 1;文件资源...已保留;文件...\WindowsXP.res的资源被丢弃。

19
在Delphi XE2中链接我的项目时出现以下错误。 重新创建.dproj文件没有帮助。
[DCC Hint] H2161警告:重复的资源:类型24(用户定义),ID 1; 保留了文件资源<filename>.res;放弃了文件c:\program files\embarcadero\rad studio\9.0\lib\Win32\release\WindowsXP.res资源。
如何解决? 感谢帮助!

1
只是一点提示:我注意到从D2010(可能是D2009)开始,IDE缓存有时会妨碍编译,并且您可能会收到重复资源警告。进行构建即可消除这些警告。因此,现在每当我看到重复的资源警告时,我首先进行构建,只有在这样做无法清除它时才开始查找。 - Marjan Venema
4个回答

23

您的应用程序中链接了多个应用程序清单。只能有一个清单,因此必须舍弃一些清单。现代Delphi版本默认基于“运行时主题”项目选项链接清单。您可能链接了另一个清单,可能是在早期版本的Delphi中开发项目时创建的。您是否偶然使用了TXPManifest组件?

您可以删除明确链接的清单。或者禁用运行时主题设置并保留明确的清单。后一种方式可以控制清单。个人而言,我会这样做,因为我需要精确控制清单中的内容。


一定还有另一个清单!这只是需要找到它的问题。 - David Heffernan
在项目的所有组件和文件中搜索字符串“TXPManifest”没有结果。 - Dmitry
2
搜索 $R,以链接资源。你刚刚升级了 Delphi 吗? - David Heffernan
13
仅删除TXPManifest组件是不够的。你还需要从表单的“uses”子句中删除XPMan单元。(添加该组件会自动添加该单元,但移除组件并不会移除单元,因为集成开发环境(IDE)无法知道移除该单元是否是正确的操作。正如我们在这个案例中看到的那样,该单元具有超出提供组件之外的副作用,而IDE不知道您是否仍然需要这些副作用。) - Rob Kennedy
3
在侧面提一下,XE2引入了指定自定义清单的功能,而不是使用默认清单。转到“项目>选项>应用程序”,将“运行时主题”设置为“使用自定义清单”,并指定.manifest文件的文件名。您仍然需要从项目中删除“XPMan”,但是这样您现在可以向项目清单添加其他条件(UAC提升,并置组件,无需注册COM等)。 - Remy Lebeau
显示剩余2条评论

7

我也遇到了同样的问题,并通过谷歌搜索找到了这个页面。

XPMan从使用列表中移除后,问题得以解决。

通过在文件中搜索“xpman”(使用“查找文件”功能),找到了罪魁祸首。感谢Rob Kennedy在评论中建议David的答案。


同样的问题也出现在Delphi Tokyo自带的示例中。它们在uses列表中使用了XPMan;如果你取消选中“启用运行时主题”,它会自动重新选中;-) - Jan Doggen
我把XPManifest从Form1中删除并添加了xp_uac.res后,遇到了问题。uses子句中的XPMan引起了这个问题。谢谢! - Shadab Mozaffar

5
感谢您的帮助。 以下内容对我有所帮助:
{$ R * .RES} from project source removed

是的。只有删除也帮助了我。从 uses 子句中删除 XPMan,什么也没有改变 - 它会自动创建。 - basti

-1

从项目源代码中删除{$R *.res}有所帮助。在Delphi XE2中{$R *.res}受到限制吗?


那听起来不是答案。如果你想要影响主应用程序资源,最好使用项目选项中的运行时主题选项。像Rob建议的那样,可以找一下xpman单元。 - David Heffernan
如果您在自定义的RC/RES文件中包含了清单(manifest),那么删除{$R *.res}可能会产生“好像已解决”的效果。最好从自定义的RES文件中删除清单,而不是删除整个RES引用。 - Gad D Lord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接