在我的一些非常大的项目中,这应该会减少可执行文件的大小.我相信还会有其他好处.
编辑:是否有一个实用程序可以扫描项目并自动删除多余的项目?我确实有100个项目,"自动删除"将是一等奖,但如果我必须,我会在识别实用程序的帮助下采用手动方式.
我使用cnPack使用清洁剂,但一般来说这是无用单位的缺点?
我知道其中一些:
1)当然,如果整个项目中没有使用该单元,那么将会有无用的资源消耗
2)代码洞察力会产生无用的结果
3)代码洞察力会变慢
但想象一个简单的案例:
我发现某些类型的代码清理和重构由于难以在大型项目的uses-clause中添加单元而变得非常困难.
我想在单个项目中的所有delphi .pas单元的interface-uses-clause中添加一个单元,这意味着在500多个地方手动执行该操作.每当我重构一个巨大的单元并将其从一个单元拆分为两个单元时,我可以使用"notepad ++"之类的东西进行搜索和替换,将"MyOldUnit"更改为"MyOldUnit,MyNewUnit",但有时候,这样做是不安全的.它还错过了"MyOldUnit"是uses子句中的最后一个("使用MyOldUnit;")的情况.
无论如何,搜索和替换文件是危险的业务.如果不存在这样的工具,我正在考虑使用Castalia delphi解析器编写一个.我检查了GExperts,Castalia,ModelMakerCodeExplorer,但没有一种方法可以将单元批量插入到项目的所有使用子句中.我希望有一个工具可以做到这一点.
其次,在很多情况下,我将一个功能从一个不属于另一个单元的单元移动,但这意味着我需要将该单元添加到项目单元的30%,而不是其他70%已经已经添加.这意味着需要解析器方法,而不是正则表达式方法.
有一个大型项目,我需要查看每个文件在其USES子句中引用的单元的层次结构.
恩.
Project Source (program.dpk)
HelperUnit Forms ThirdPartyUnit
MyUtils MyConsts MyDownload TPShellShock TPWhatever
Run Code Online (Sandbox Code Playgroud)
我怎么能看到这种依赖树呢?我记得在一个较新的Delphi版本中有一些这样的功能,但我不记得它叫什么.它可能是一个插件.
关于如何做到这一点的任何提示都会很棒.我开始编写我自己的程序来做这件事,但我已经浪费了3个小时,我仍然在处理pas文件的解析器.
我正在将我们的项目从XE7更新到XE8.目前他们仍然需要使用XE7,因此需要一些条件.例如,ImageList已更改单位,因此Vcl.ImgList是XE8中的Syste.ImageList.为了使它适用于两个Delphi版本,uses子句看起来像这样:
uses
System.SysUtils, System.Classes, Vcl.Controls
{$IF CompilerVersion >= 29.0}
,System.ImageList
{$else}
,Vcl.ImgList
{$endif}
,cxGraphics;
Run Code Online (Sandbox Code Playgroud)
有时这很好.但是,Delphi通常会自动重新添加System.Imagelist单元,即使它已经存在,尽管是有条件的,例如
uses
System.SysUtils, System.Classes, Vcl.Controls
{$IF CompilerVersion >= 29.0}
,System.ImageList
{$else}
,Vcl.ImgList
{$endif}
,cxGraphics, System.ImageList;
Run Code Online (Sandbox Code Playgroud)
编译时,XE8会抱怨.
[dcc32 Error] dmImagesU.pas(13): E2004 Identifier redeclared: 'System.ImageList'
Run Code Online (Sandbox Code Playgroud)
a)为什么Delphi添加单元?b)有人知道解决方法吗?
我有问题.我会试着解释一下.
我有一个单元,有一个类,可能会有新的功能.
D3BF4E849ACC45249B990F802EFB1F15\UnitFile1.pas 8DC8977E7A7B469AACFE3CC77CA7075E\UnitFile1.pas
它们都有相同的类:IClass_1 = class
我使用代码编号为这个文件的不同版本.
另一个单元文件(UnitFile2.pas)使用该单元文件(UnitFile1.pas).
此外,第二个单元文件(UnitFile2.pas)具有不同的版本.
F94C439C822E490DB228F2C16EF2C190\UnitFile2.pas 14CEEFAFF1D64DDD8CBDEDD334D4A3FF\UnitFile2.pas
它们都有相同的类:IClass_2 = class(IClass_1)
现在问题开始了;
"F94C439C822E490DB228F2C16EF2C190\UnitFile2.pas"需要"D3BF4E849ACC45249B990F802EFB1F15\UnitFile1.pas"
"14CEEFAFF1D64DDD8CBDEDD334D4A3FF\UnitFile2.pas"需要"8DC8977E7A7B469AACFE3CC77CA7075E\UnitFile1.pas"
但文件名是相同的(我需要一个像这样的系统.所以它们是相同的).在单元文件中,delphi不允许我这样写;
在文件F94C439C822E490DB228F2C16EF2C190\UnitFile2.pas; 在'D3BF4E849ACC45249B990F802EFB1F15\UnitFile1.pas'中使用UnitFile1;
我希望我能说出我的问题.如何告诉编译器我想要使用哪个单元文件的路径?(我使用的是Delphi-7)
delphi ×7
uses-clause ×7
delphi-7 ×1
delphi-units ×1
delphi-xe7 ×1
delphi-xe8 ×1
gexperts ×1
hierarchy ×1
include ×1
path ×1