【问题标题】:IDE expecting file to be in different locationIDE 期望文件位于不同的位置
【发布时间】:2012-12-21 06:42:26
【问题描述】:

我在 Delphi XE2 版本 16.0.4429.46931 中有一个组件包,同时是运行时和设计时包。这个包已经存在一年多了,文件/文件夹结构一直都是一样的。我将所有单元保存在根目录的专用Source 文件夹中,并将实际包保存在同一根目录的Packages 文件夹中。所以包在\Root\Packages\中找到,单位在\Root\Source\中找到。

今天,在构建运行时包之后,我正在查看提示和警告。其中一个警告是:

[DCC Warning] Inno.TimeChart.pas(1): W1025 Unsupported language feature: 'class constructor'

警告本身并不是我担心的。问题是当我双击此警告时,我从 IDE 收到一条错误消息:

我立即注意到的一件事是它不是在Source 文件夹中查找,而是直接在Packages 文件夹中查找。不知何故,IDE 期望该单元与包位于同一位置。自从我一年多前创建包以来,我从未更改过任何库路径、文件位置或包的结构。

该文件确实存在,但与看起来不同的位置。该文件从未与项目一起保存在文件夹中,事实上,除了包项目本身之外,没有其他任何东西被保存在Packages 文件夹中。这一切都位于 Source 文件夹中,但 IDE 似乎不这么认为。

为什么 IDE 会认为该文件位于不同的文件夹中?当我双击它们时,与同一单元相关的所有其他提示和警告都可以正常工作,但不是这个。

编辑

我创建了一个新的测试包来解决这个问题。

Root\TestPackage.dpr
Root\Source\TestPackageUnit.pas

导致此编译器警告的特定代码在此类中:

type
  TMyComponent = class(TComponent)
  strict private
    class constructor Create;
  end;

当我使用 Process Monitor 进行编译时,我看到 IDE 正在 30 多个不同的地方搜索这个文件(当然失败了),看起来它正在搜索每个库路径,而不是包上的一个地方它在。

我尝试过的事情

  1. 已验证 DPRDPROJ 文件之间的这些路径之间没有区别
  2. 安装了所有最新更新和 IDE FixPack(实际上给我带来了新问题)
  3. 使用进程监视器监控文件的访问
    1. 过滤器:进程名称等于BDS.exe;路径以TestPackageUnit.pas 结尾
    2. 结果:“未找到名称”--> 所需访问权限:通用读取处置:打开选项:同步 IO 非警报、非目录文件属性:N 共享模式:读取、写入分配大小:n/a
  4. 尝试了仅设计时、仅运行时和设计时/运行时组合
  5. 尝试使用已注册和未注册的组件
  6. 尝试使用库路径中的目录而不是库路径中的目录
  7. 从库路径中删除了大约 20 个不必要的条目以使其更短
  8. 将目录移至库路径顶部
  9. 已验证没有与项目关联的DOF 文件(我认为来自旧版本)
  10. 重新启动 IDE 和计算机的次数
  11. 清理了项目中的已编译文件和临时文件,包括 BPL 和 DCU 文件
  12. strict private 更改为仅private 甚至public

【问题讨论】:

  • 很难说,也许你的包源在contains子句中不包含这个源文件的路径,也许你需要重启IDE。如果 IDE 编译它们,肯定会找到源文件。
  • 检查一下!记录实际检查文件的文件夹。当 Delphi 无法将我的 BPL 构建到 $(OutputPathVar) 中时,我有过经验 - 但重新启动修复了它。而且我看到安装程序将 64 位路径强制到 32 位 Delphi 环境中,删除原始路径的问题。可能会遇到很多麻烦,但日志记录最终会让您了解到底发生了什么。
  • SysInternals.com 过滤器:进程名、equal、BDS.exe(或者你的 delphi 的调用方式);路径,以您的文件名结尾。在工具栏上按 filesystem operations 按钮并取消按下所有其余按钮
  • Jerry,DPK 的结构是什么,你使用的是指向单元的相对路径吗?
  • 在最坏的情况下,您可能会遇到 ICE - 内部编译器错误。我遇到了 Unit1 被 Unit2 使用并且 Unit1 触发 ICE 的情况。但它被报告给了Unit2的负责人。但这不是关于警告,而是关于清除 ICE。顺便说一句,警告的文字对我来说似乎很奇怪。在哪种情况下 XE2 可能不支持类构造函数? C++ 标头发出?扩展语法关闭?文字或警告让我很好奇

标签: delphi ide delphi-xe2


【解决方案1】:

当 delphi 搜索路径列表太长时,我确实遇到了这样的问题。我总是可以帮助自己将相关目录更多地移到前面,即在列表中。

【讨论】:

  • +1,我认为这会解决它,所以我从库路径中删除了近 20 个不必要的目录,但我仍然遇到同样的问题。现在共有 33 个目录,总共 1,740 个字符。还是太长了吗?
  • 老实说,我从来没有数过字符。将路径移到列表顶部没有帮助吗?
  • 试过了,但是没有用。无论如何,它不应该与库路径有任何关系,因为此时它只是编译包。这不像一些外部项目试图引用这个包,这个包它自己不知道它自己的文件在哪里。它甚至不应该尝试查看库路径。
【解决方案2】:

检查该文件是否未添加到项目文件(dpr 或 dpk)中。项目 - 查看源代码将显示该文件。

如果不是这样,请尝试在项目中的所有文件中搜索文件名,看看会出现什么。

【讨论】:

    【解决方案3】:

    在另一个网站上找到了这个:

    还有另一个 QC 可能与您的问题有关。 http://qc.embarcadero.com/wc/qcmain.aspx?d=87693

    转到项目选项 -> Delphi 编译器 -> 输出 C/C++ 及以下 C/C++ 输出文件生成选择仅生成 DCU。

    达莉娅·普拉斯尼卡

    来源:http://codeverge.com/embarcadero.delphi.general

    【讨论】:

    猜你喜欢
    • 2012-03-20
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多