在.dpr文件的uses子句中,Delphi有时会在单元路径前面添加{$R *.res},这时我在尝试编译时会收到资源重复的警告。
有人知道为什么Delphi会这样做吗?我正在使用Delphi 2009,但自从Delphi 2007(可能也包括2006)以来就一直出现这种情况。
在.dpr文件的uses子句中,Delphi有时会在单元路径前面添加{$R *.res},这时我在尝试编译时会收到资源重复的警告。
有人知道为什么Delphi会这样做吗?我正在使用Delphi 2009,但自从Delphi 2007(可能也包括2006)以来就一直出现这种情况。
这取决于您对 .dpr 文件所做的其他操作。Delphi 希望该文件按照特定方式布局,如果您以某种方式修改了它,使内部 IDE 解析器无法正确找到某些内容,那么它可能会猜测错误。最初,.dpr 文件并不是为了让用户随意修改而设计的,因此它可能会感到困惑。IFDEFS 是最常见的罪魁祸首,可能会混淆 IDE 解析器。
为什么Delphi会在你的代码中添加“错误”的{$R}和{$R *.res}文本是由DPROJ文件隐藏起来的。只需要用文本编辑器打开DPROJ文件,搜索$R *.res,然后删除这些标记即可。
<DCCReference Include="..\..\..\Core\IF.Common\uTranslation.Types.pas">
<Form>$R *.res</Form>
</DCCReference>
<DCCReference Include="..\..\..\Core\IF.Common\uTranslation.Types.pas"/>
现在您的项目中将不会出现糟糕的文本(直到下一次IDE添加这样的内容到DPROJ文件失败为止)。
program Example;
{$R *.res}
uses
Unit1 in 'Unit1.pas' {frmUnit1};
begin
Application.Initialize;
Application.CreateForm(TfrmUnit1, frmUnit1);
Application.Run;
end.
我已经掌握了一些"启发式方法"来处理IDE混淆dpr的问题:
这非常令人恼火,发生时没有明显的原因,并且据我所知无法防止 :(
在 .dpr 文件中默认 {$R *.res} 应该位于 uses 和 var 子句之间。
有时项目文件会损坏..
只需删除源目录中除 *.dpr、*.pas、*.dfm 之外的任何文件
Delphi 将重新构建其他文件,包括 *.res
就是这样
dpr
文件,然后将其声明为只读,这样IDE就不会更改它。 - Johan