【发布时间】:2011-04-07 17:21:31
【问题描述】:
我有一个数据模块,它在我们的一个业务应用程序中使用。它在项目中几乎每个单元的 implementation uses 子句中。
我可以在数据模块的实现部分修改业务逻辑和其他代码并编译没有任何问题。但是,对数据模块的接口部分进行任何更改,然后进行编译都会导致编译器错误“Unit MyDataModule 递归使用自身”。构建而不是编译会使错误消失。
这是我以前从未见过的新产品。当然,我已经检查以确保无法递归使用数据模块,如果确实如此,则构建不会改变任何东西。
有没有人知道如何追踪或修复它?每次向数据模块引入新的查询或方法时,都必须编译、关闭错误对话框,然后再构建,这真的很烦人。
编辑:解决下面和@Marjan 的回答中的一些 cmets:
我没有使用变体或调试 dcus。我在其中一个 Google 搜索结果中尝试了一个解决方案,该结果看起来 promising 关于损坏的 .identcache 或 .local 文件,但没有成功。
尝试了@Jørn 的建议;清理了所有临时文件并编译了 .dcus,进行了编译,一切都很好。对接口进行了更改(在数据模块的类声明的私有部分中声明了一个布尔变量),然后按 Ctrl+F9 进行编译。错误。做了一个构建,一切都很好。编译然后工作正常。删除布尔值,尝试编译:错误。
我有大约 20 个类似大小的项目 (~750K-1M LOC),没有一个项目表现出这种行为。我已经四次检查数据模块不在项目中任何单元的接口部分。数据模块本身并不是很大(从'unit'到'end.'共8345行,包括cmets和空白行)。 .dfm 被视为文本,共有 8,916 行。
编辑 2:我想我必须接受(现在,无论如何)这是一个编译器故障。我将尝试重新安排一些事情,将一些功能分解到一个单独的数据模块中,看看它是否是一个大小限制(可能是 DFM 中的项目)或其他什么。感谢所有的努力。
【问题讨论】:
-
为什么不每次都构建?我从不使用编译。
-
或创建一个新单元,将您的数据模块添加到该单元的接口使用子句中,并在几乎所有其他单元中引用该单元而不是直接在数据模块中。 (只是我的头顶,所以如果我有妄想,请原谅)
-
@Johan,您的第二个选项没有意义,您的第一个选项证明您不是在从事大型项目。 Delphi 可能很快,但对于我的大型项目,构建时间是 15 到 30 秒。 30 秒太长了:我的眼睛已经有足够的时间转移到 Stack Overflow 上并开始回答问题了。所以 30 秒变成了 30 分钟。哎呀!
-
@Cosmin, @Johan:加上按 F9 启动应用程序和 IDE 编译,它不进行构建...您必须记住每次在按 F9 之前进行构建。 .
-
对清理搜索、库和浏览器文件夹中的临时编译文件有帮助吗?我的第一个想法是编译器试图使用一些不应该使用的编译文件。
标签: delphi delphi-2007