每隔几周,我就会碰到这一点:当对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.
答案 0 :(得分:4)
我知道唯一有效的方法是让IDE管理.dpr文件。
如果您执行上述任何操作,请期待IDE退回。
就个人而言,我会做所有这些并在提交时反击。我使用我的VCS来防御伪造的IDE更改。这不是理想的,但它是最好的选择。