«Невозможно загрузить пакет A, он содержит модуль X, который также содержится в пакете B»

StackOverflow https://stackoverflow.com/questions/1191602

Вопрос

(Мне больше удовольствия от установки пакетов/компонентов — спасибо всем за вашу помощь).

Я получаю сообщение об ошибке, указанное в заголовке, в Delphi 2007.Пакет A-это мой пакет на основе кадров "просмотра панелей". Пакет B-это пакет, содержащий пару компонентов, которые используются для показа информации о наборах данных, связанных с базой данных GVEN (их SQL, состояние, тип класса и т. Д.), Одним из которых является невизумный компонент (мы назовым. Инспектор), который создает и вызывает форму, показывающую эту информацию.Единица X — единица этой формы.

Я добавил компонент «Инспектор» в одну из панелей просмотра в пакете, но с тех пор удалил его и не могу найти никакой ссылки на него ни в исходном коде проекта, ни в модуле панели просмотра на основе кадров, в которую я его добавил.Где скрывается ссылка?

Кроме того, что может вызвать эту проблему при добавлении этого компонента Inspector в один из фреймов панели просмотра (которые также устанавливаются как зарегистрированные компоненты)?

Вероятно, это связано с этот предыдущий вопрос и Вот этот тоже, но я решил начать заново с этого конкретного симптома/проблемы, просто чтобы он был кратким и ясным и, надеюсь, таким образом, был полезен кому-то еще позже.Заранее спасибо за любую помощь.


Обновлять:

Благодаря Лорен мне удалось найти и удалить оставшуюся ссылку USES, которая вызывала проблему.ОДНАКО, я до сих пор не понимаю, как добиться того, чего я пытаюсь достичь.:\ Вот последние новости:

Инспектор-это простой невизуальный компонент, который содержит свойство набора данных, и внутренняя «информационная форма». Вызов метода Showinfo создает форму и заполняет ее различной информацией, связанной с связанным набором данных.Я хочу использовать его для отладки SQL, управляющего зрителями.

Как упоминалось выше, Инспектор содержится в пакете Б.Зрители находятся в пакете А.Я хочу использовать компонент Inspector на некоторых потомках TFrame (которые регистрируются как настоящие компоненты палитры).Когда я добавляю этот компонент в данный TFrame, чтобы использовать его, и компилирую/устанавливаю пакет A, я получаю сообщение об ошибке «Невозможно загрузить пакет A, он содержит модуль X, который также содержится в пакете B».Теперь это очевидная причина, и я могу воссоздать проблему по требованию.

Предложение moobaa, приведенное ниже, имеет смысл, но тем не менее оно кажется что, хотя я пытаюсь реализовать подход № 2 из того, что он предлагает, он не работает.Что мне не хватает?Кажется, что это должно быть выполнимо, и на самом деле кажется, что большинство пакетов, которые я видел, постоянно используют другие установленные пакеты (включая сам VCL).

Примечание:Насколько я могу судить, пакет B не зависит от пакета A (и я установил его отдельно, так что, кажется, согласен).

(Кстати, есть ли какие-нибудь инструменты для «отображения» подобных зависимостей пакетов?Я использую D2007)

Как всегда, спасибо за ваше время и помощь.

Это было полезно?

Решение

Тот факт, что вы удалили компонент, не означает, что вы удалили имя модуля из предложения USES — они не удаляются автоматически.

Другие советы

Это также может быть связано с этот вопрос.

Модуль X явно связан с обоими пакетами.Есть несколько способов обойти это:

  • создайте новый пакет (мы назовем его Пакет C) с модулем X (и любыми другими зависимостями), затем измените Пакет A и Пакет B, чтобы оба использовали Пакет C;или...
  • включить модуль X в пакет B, а пакет A использовать пакет B (который является более компактной формой первого решения).

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

Теперь, если с этой зависимостью все в порядке, добавление ссылки на пакет A из пакета B должно сразу устранить эту проблему;в конце концов, B будет «использовать» код из пакета A, и одни и те же модули не будут компилироваться в два пакета.Однако, если это вводит циклические ссылки (я не могу вспомнить, использует ли A B или нет), то вам может потребоваться небольшой рефакторинг до :}

Лорен: Требуется пункт, поскольку это .dpk, вы не можете ИСПОЛЬЗОВАТЬ пакеты.

Я бы просто очистил каталог $(BDSDIR)/projects/, каталог моих собственных проектов, чтобы удалить B.dcp и все dcu для модулей, которые были в B, а затем пересобрал A.

Еще нужно проверить, зарегистрирован ли компонент, зависящий от B.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top