Проблема пакета Delphi: упакованные устройства должны относиться только к упакованным устройствам. (E2411) - PullRequest
5 голосов
/ 08 сентября 2011

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

[DCC Fatal Error] myunit3.pas(244): E2411 Unit XBAT in package B_Dsgn refers to unit QBEE which is not found in any package. Packaged units must refer only to packaged units

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

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

enter image description here

Самое странное, что каждый раз, когда я чищу и перестраиваю,Я получаю другое имя устройства в ошибке.(Показано выше, что Unit 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.Есть идеи, что происходит?

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

Ответы [ 4 ]

7 голосов
/ 09 сентября 2011

Я подозреваю, что это неясная ошибка компилятора.

В проекте, в котором я участвовал, было как минимум 4 уровня зависимых пакетов времени выполнения:

PackageA <- PackageB <- PackageC <- PackageD</p>

E2411 Единица "% s" в пакете PackageD относится к единице "% s", которая не найдена ни в одном пакете.Упакованные модули должны относиться только к упакованным модулям.

Единственное найденное мной решение - это создание пакетов A, B и C, которые никогда не собираются (т. Е. Explicit Build), и используются Зависимости проекта. для обеспечения порядка сборки.Мне пришлось сделать все три никогда не построенных, или я бы получил

E2220 Никогда не собираемый пакет "% s" требует всегда собираемый пакет "% s"

Iзнаю, что это, вероятно, не тот ответ, который вы искали, но вот он.

Кстати, это случилось со мной в Delphi 2009.

2 голосов
/ 09 сентября 2011

Это довольно просто: если единица в C относится к единице, не входящей ни в какую упаковку, указанную в пакете C, эта единица должна быть включена в C, или же на C., в которой она может быть найдена, должна быть ссылка на C. При необходимости поместите устройство в отдельную упаковку.

Куда вы указываете, какая единица зависит от зависимостей. Имеет смысл сделать это, как и вы, но с разрешением на уровне единиц.

Обновление

Ваше обновление 1 и обновление 2 все еще заставляют меня думать, что есть единица, которую использует один из ваших юнитов (прямо или косвенно ), на которую нет должной ссылки. Возможно, даже блок RTL или VCL. Поскольку у вас есть дизайнерские пакеты, я предполагаю, что в них есть компоненты.

IME, минимальный набор пакетов для включения

requires
  rtl,
  designide,
  vcl,
  vclactnband,
  vclx,
  xmlrtl;
1 голос
/ 06 июля 2012

В проект, который выдает ошибку, необходимо добавить при необходимости. ошибка dcp.

В вашем случае:

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

В пакет, где находится диск myunit3.pas, добавьте необходимые: QBEE

По крайней мере, мне удалось это сделать.

0 голосов
/ 18 апреля 2019

Вы используете QBEE в устройстве XBAT , в этом случае у вас есть четыре варианта:

1 - вы не добавили QBEE в содержит список в пакете B_Dsgn .

2 - Если QBEE уже связан в другом пакете, можно вызватьэто Original_Package тогда вы должны добавить пакет в список требует в B_Dsgn и не содержать блок.

3 - Original_Package содержит

{$IMPLICITBUILD ON}

в своем dpk-файле, поэтому сначала нужно отключить IMPLICITBUILD и собрать Original_Package после этого вы можете собрать пакет B_Dsgn .

4 - у вас, вероятно, не было XBAT в B_Dsgn , но у вас естьэто в другом среднем пакете, давайте назовем его B_Run и у вас будет B_Run в списке требований B_Dsgn , в этом случае попробуйте сначала исправить B_Run остроумиеh один из трех верхних вариантов и затем его построение, после чего вы можете собрать B_Dsgn .

Примечание:

  • последнийдва случая могут быть воспроизведены с длинным списком модулей, а не только с двумя или тремя пакетами, которые требуют друг друга, в этом случае все пакеты должны иметь IMPLICITBUILD off.
  • Очистить код для каждогопакет пакетов, которые влияют на проблему перед сборкой.

удачи

...