Delphi 12.1中IDE重复添加条件编译单元至Uses子句的解决方法
以下是针对该编译错误的实用解决方法:
调整条件编译的
uses块写法
不要将条件编译的单元引用混入默认Uses块,而是在Implementation部分单独用条件块包裹:implementation {$IF defined(PRGADMIN) or defined(PRGSERVER)} uses MyAdminDM, Provider; {$ELSE} uses // 项目其他必要单元 {$ENDIF}这种写法能避开IDE的自动扫描误判,明确区分不同编译上下文的依赖关系。
在项目级别统一定义条件编译符号
不要在单元内部定义PRGADMIN或PRGSERVER,而是进入项目选项(Project > Options > Delphi Compiler > Conditional defines),给PrgAdmin项目单独添加PRGADMIN、给PrgServer项目添加PRGSERVER。让IDE明确当前项目的编译上下文,减少自动添加单元的误触发。临时禁用IDE自动添加单元功能
打开IDE设置(Tools > Options > Delphi Options > Editor Options),找到Auto-add units to uses clause选项并取消勾选。这是全局设置,会影响所有项目,适合临时解决问题,之后可按需恢复。清理IDE缓存与项目临时文件
删除项目目录下的.dproj.local、.identcache、.stat文件,以及Win64输出目录中的临时编译文件,然后重新打开项目。这些缓存文件可能存储了错误的单元引用记录,导致IDE重复添加。排查设计时依赖
如果PrgServer的数据模块在设计时直接引用了TAdminDataModule的类型或组件,IDE会自动尝试添加单元。确保所有对TAdminDataModule的使用都通过代码动态处理(比如动态创建实例),而非在设计阶段直接关联。
内容的提问来源于stack exchange,提问作者Jan Doggen

