【问题标题】:Tool to change a unit name and all references to it更改单位名称及其所有引用的工具
【发布时间】:2012-03-13 10:56:32
【问题描述】:

如果我对某个单元进行重大更改,我希望更改其名称以明确这是一个不同的版本,并避免与其他存档版本混淆,例如: CSVUtils.PAS 变为 CsvUtilsNew.PAS

但其他单位对它的所有引用都必须手动更改,例如:

Unit ManiForm

Uses
  CSVUtils 

变成

Unit ManiForm

Uses
  CsvUtilsNew

这在复杂的项目中变得非常费力。

Icarus 非常擅长查找所有参考资料,但我找不到任何可以自动更新所有其他单位的工具。

有人知道自动更新单元引用的任何工具吗?

非常感谢

【问题讨论】:

    标签: delphi pascal


    【解决方案1】:

    我会使用GExperts Grep 搜索和替换。

    【讨论】:

    • 任何 grep 都可以解决这个问题。多年来,我一直使用这个 (wingrep.com) 裸露的骨头。
    • 可能,但 GExperts grep 已集成到 IDE 中,并且在某种程度上针对 Delphi 开发进行了定制。
    • @Ulrich,我同意。使用 GExperts grep,您可以将您的范围限制为项目、项目组、目录等。
    • 有用的工具,可能是 GExperts 中的其他一些我也会觉得有用的功能,我喜欢它为 Delphi 设计的。
    【解决方案2】:

    我会使用 Notepad++ 或 UltraEdit 在所有文件(*.pas、*.dpr、*.dproj)中搜索和替换旧的单位名称和新的单位名称。除非您有与单元同名的变量或函数,否则此方法运行良好、速度快且不需要任何专门的解析器。

    【讨论】:

      【解决方案3】:

      您还可以在项目选项中定义单位别名。 例如。 CSVUtils=CsvUtilsNew

      【讨论】:

      • 它确实有效。我使用此功能帮助从 D6 迁移到 D2010。有问题的单元是 Mike Lischke 的 XP 主题管理单元,它在 D7 中被 Delphi 吸收并导致名称更改。还有具有不同名称的 png 和 gif 图像单元。我只需要别名,而我希望代码可以使用两个编译器进行编译。单位别名效果很好。不过,我不会将它们视为长期解决方案。
      • 对于需要单一源代码在所有 delphi 版本中编译的组件供应商来说,单元别名可能是正确的解决方案,但在应用程序级别(而不是组件级别的供应商)它很快就失去了意义。
      • 我们使用 List&Label 作为报表引擎。它具有在单元名称中包含其版本号的可爱功能 - 有l17.pascmbtLL17.pas 等等。我们通过别名cmbtLLAlias=cmbtLL17;LLAlias=l17 解决了这个问题,并将“...别名”名称放入uses 子句中。
      • 这些都是非常有用的提示,一旦你知道要寻找什么,总会有惊喜!!我还没有接受 3 个答案中的任何一个,因为我怀疑所有 3 个都有其相对优点,所以我不想在不存在的地方表达偏爱,我会尝试建议的方法并看看哪种方法最适合我的应用程序,Brian
      • 这是一个很好的技巧 CSVUtils=CsvUtilsNew 我以前不知道,它可以快速解决问题,但我怀疑最好不要广泛使用,主要是因为如果其他人是在项目上工作,他们可能没有意识到这一点并可能导致混乱。好的调试快速修复?
      猜你喜欢
      • 1970-01-01
      • 2011-10-04
      • 2016-08-10
      • 2019-03-06
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多