不要做什么来阻止Delphi在.DPR中修改使用列表和{$*.RES}

每隔几周,我就会碰到这一点:当在Delphi项目中对使用单元进行IDE操作时,它会破坏.dpr文件.

会发生什么,它重建使用列表,但错误的位置.

我想知道要避免哪种使用模式,所以我不会再次遇到这个错误.

我在许多Delphi版本中都出现过这种错误.我知道它至少存在于Delphi XE2(今天又发生在那里),XE,2007,2006和7.

受损的片段通常是这样构造的:

ususes
  Forms,..
  LastUnitInUses in 'LastUnitInUses.pas';

R *.RES}

并应删除一个我们,并添加{$:

uses
  Forms,..
  LastUnitInUses in 'LastUnitInUses.pas';

{R *.RES}

出错的示例文件

program SysUtilsFormatTests;
{

  Delphi DUnit Test Project
  -------------------------
  This project contains the DUnit test framework and the GUI/Console test runners.
  Add "CONSOLE_TESTRUNNER" to the conditional defines entry in the project options
  to use the console test runner.  Otherwise the GUI test runner will be used by
  default.

}

{$IFDEF CONSOLE_TESTRUNNER}
{$APPTYPE CONSOLE}
{$ENDIF}

ususes
  Forms,TestFramework,GUITestRunner,TextTestRunner,SysUtilsFormatUnit in 'SysUtilsFormatUnit.pas';

R *.RES}

begin
  Application.Initialize;
  if IsConsole then
    with TextTestRunner.RunRegisteredTests do
      Free
  else
    GUITestRunner.RunRegisteredTests;
end.

更正的.dpr文件示例:

program SysUtilsFormatTests;
{

  Delphi DUnit Test Project
  -------------------------
  This project contains the DUnit test framework and the GUI/Console test runners.
  Add "CONSOLE_TESTRUNNER" to the conditional defines entry in the project options
  to use the console test runner.  Otherwise the GUI test runner will be used by
  default.

}

{$IFDEF CONSOLE_TESTRUNNER}
{$APPTYPE CONSOLE}
{$ENDIF}

uses
  Forms,SysUtilsFormatUnit in 'SysUtilsFormatUnit.pas';

{$R *.RES}

begin
  Application.Initialize;
  if IsConsole then
    with TextTestRunner.RunRegisteredTests do
      Free
  else
    GUITestRunner.RunRegisteredTests;
end.

解决方法

我知道唯一可行的是让IDE让你管理.dpr文件.

>不要添加评论.
>不要使用$IFDEF等条件.
>不要修改.dpr文件中的代码.

如果您执行上述任何操作,请期待IDE退回.

就个人而言,我做了所有这些并在提交时反击.我使用我的VCS来防御伪造IDE的变化.这不是理想的,但它是最好的选择.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...