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

时间:2013-05-27 14:19:06

标签: delphi delphi-xe2

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

它会重建uses列表,但位置错误。

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

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

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

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

R *.RES}

并应删除一个us并添加{$

进行更正
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,
  TestFramework,
  GUITestRunner,
  TextTestRunner,
  SysUtilsFormatUnit in 'SysUtilsFormatUnit.pas';

{$R *.RES}

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

1 个答案:

答案 0 :(得分:4)

我知道唯一有效的方法是让IDE管理.dpr文件。

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

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

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