Проблема с пакетами в Delphi: упакованные блоки должны ссылаться только на упакованные блоки... (E2411)

Ошибка, которую я получаю, выглядит так:

[DCC Fatal Error] myunit3.pas(244): E2411 Блок XBAT в пакете B_Dsgn ссылается на блок QBEE, который не найден ни в одном пакете. Упакованные блоки должны ссылаться только на упакованные блоки

Мне нужно знать, что на самом деле означает эта ошибка, с которой я столкнулся, и, если возможно, как устранить неполадки и решить такие проблемы, особенно когда факты, указанные в сообщении об ошибке, неверны (блоки на самом деле ссылаются на другие блоки в других действительных пакетах).

Такие проблемы связаны с зависимостями пакетов. У меня возникла интересная проблема с серией из трех пакетов designtime и трех пакетов runtime, связанных следующим образом:

enter image description here

Самое странное в этом то, что каждый раз, когда я очищаю и восстанавливаю пакет, я получаю другое имя блока в ошибке. (Выше показано, что блок XBAT относится к блоку QBEE).

Другая странная вещь заключается в том, что он ссылается на модули, которые находятся в зависимости верхнего уровня и являются частью пакета, который уже был собран.

Шаги;

  1. Компилируем A, все работает.
  2. Скомпилируйте A_Dsgn, он работает.
  3. Скомпилируйте B, работает.
  4. Скомпилировать B_Dsgn, работает.
  5. Компилируем C, и он не работает с этой ошибкой E2411.

Поскольку я сомневаюсь, что кто-то может сказать мне, как именно это исправить, я ищу шаги по устранению сложной проблемы зависимости в пакете. Буквальное значение приведенной выше ошибки предполагает, например, что у меня должно быть соответствующее сообщение о неявно связанном блоке, которого у меня нет. Я добавил все неявно используемые единицы в базовые пакеты A, и B, так что предупреждений о неявных единицах нет.

Следующей моей идеей было разделить выходные папки DCU для каждого пакета, чтобы выходные папки DCU из одного пакета не сбивали компилятор с толку. Теперь я даже не могу собрать пакеты.

Обновление Я попробовал поиграть с опциями Explicit Rebuild и Rebuild as Needed. Я обнаружил, что эта ошибка связана с включенной опцией 'Rebuild as Needed'. Когда она выключена, пакеты не работают с другими ошибками, более существенными. Мне кажется странным, что компилятор выдает странные ошибки, которые можно отключить, выключив Rebuild as needed. Есть идеи, что происходит?

Обновление 2 Основная проблема не решается включением или отключением явной пересборки. Вместо того чтобы получить эту ошибку, я получаю раздражающие проблемы с пакетами во время выполнения/дезайна, которые приводят к набору пакетов, которые не могут быть загружены одновременно. (Невозможно загрузить пакет foo, потому что он содержит блок bar, который также находится в пакете bat. Хотите ли вы попытаться загрузить этот пакет при следующей загрузке проекта?).

5
задан Warren P 8 September 2011 в 19:39
поделиться