我刚刚升级到Delphi XE7。现在,在XE中完全符合要求的软件包将不再编译。

我有B包,它要求将ImplicitBuild设置为OFF的包A。
首先,我编译并安装了程序包A。然后尝试编译程序包B,但编译器说:


  [dcc32致命错误] A.dpk(39):E2225永不构建软件包'A'必须为
  重新编译。
  
  [dcc32致命错误] B.dpk(34):E2202找不到所需的程序包'A'。


显然,找到软件包A是因为编译器知道其内容(它知道ImplicitBuild设置为OFF)。
另外,很明显,我在“库路径”中添加了包A的路径。

如果我从包A中删除ImplicitBuild指令,则编译器会简单地说:


  “未找到所需的包'A'。”


Process Monitor显示了一个有趣的条目:


  C:\ Users \ trei \ Documents \ Embarcadero \ Studio \ 15.0 \ Imports \ A.dcp   未找到
  
  C:\ Users \ Public \ Documents \ Embarcadero \ Studio \ 15.0 \ Bpl \ A.bpl   违反共享


在“ C:\ Users \ trei \ Documents \ Embarcadero \ Studio \”中没有“ 15.0”文件夹。


为什么找不到A.dpk文件?
为什么Delphi仍然要重新编译A包?
为什么Delphi会在“导入”文件夹中搜索DCP文件? DCP存储在'c:\ Users \ Public \ Documents \ Embarcadero \ Studio \ 15.0 \ Dcp \ A.dcp'




趣味事实:
有一个与此消息相关的错误(错误#109584),但在XE4中已将其标记为已修复。
http://qc.embarcadero.com/wc/qcmain.aspx?d=109584
回归?

最佳答案

PATH env变量必须包含bpl文件夹。安装程序通常会为您添加此文件夹。如果不是这种情况,则Delphi将找不到bpl,因为bpl是作为dll加载的。 LoadLibrary不在乎Package输出目录。但是path变量的大小有限制。因此,这可以解释为什么在全新的Delphi安装中缺少此功能。

在最新版本的Delphi中,您可以转到“工具”->“选项”->“环境变量”并添加path用户替代,而不用修改环境路径:
C:\Users\Public\Documents\Embarcadero\Studio\15.0\Bpl;C:\Program Files (x86)\Embarcadero\Studio\15.0\bin;C:\Program Files (x86)\Embarcadero\Studio\15.0\bin64;C:\Users\Public\Documents\Embarcadero\Studio\15.0\Bpl\Win64;C:\Users\Public\Documents\Embarcadero\InterBase\redist\InterBaseXE3\win32_togo;C:\Users\Public\Documents\Embarcadero\InterBase\redist\InterBaseXE3\win64_togo;$(PATH)

最后的$(PATH)用作全局PATH env var的占位符。

这样可以减小PATH env var的大小,特别是如果您安装了许多版本的Delphi。

10-08 07:15