“Não é possível carregar o pacote A, que contém unidade X, que também está contido no pacote B”

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

Pergunta

(Mais package / componente instalar divertido para mim - obrigado a todos por sua ajuda até à data).

Estou recebendo o erro listado como o título, em Delphi 2007. O pacote A é meu pacote de frame-based "painéis espectador." Pacote B é um pacote contendo um par de componentes que são usados ??para mostrar informações sobre conjuntos de dados ligados a um banco de dados gven (seu SQL, estado, tipo de classe, etc), um dos quais é um componente não-visual (vamos chamá-lo o Inspector) que cria e chama um formulário mostrando essa informação. Unidade X é a unidade de que forma.

Eu adicionei o componente Inspector para um dos meus painéis espectador em pacote, mas, desde então, excluí-la, e não pode encontrar qualquer referência a ele em Ver código fonte para o projeto, nem na unidade do painel visualizador baseado em quadro acrescentei a. Onde é o esconderijo de referência?

Além disso, o que faria a adição desse componente Inspector a uma das armações de painel vista (que também são instalados como componentes registrados), causa este problema?

Este é provavelmente relacionado com esta anterior pergunta e esta bem, mas eu decidi começar de novo com este específico symtpom / issue, apenas para mantê-lo sucinta e clara, e espero que assim útil para alguém mais tarde. Agradecemos antecipadamente a toda e qualquer ajuda.


Update:

Graças ao Loren, eu era capaz de encontrar e remover a referência usos que permaneceu e estava causando o problema. No entanto, eu ainda não estou claro sobre como realizar o que estou tentando realizar. : \ Aqui está o mais recente:

O Inspector é um componente simples não-visual que contém uma propriedade DataSet, e um "Info Form." Interna Chamar um método ShowInfo cria o formulário e preenche-lo com várias informações relacionadas ao DataSet ligados. Eu estou querendo é usado para depurar o SQL dirigindo os telespectadores.

Como mencionado acima, o Inspector está contido no pacote B. Os telespectadores estão em Package A. Eu quero usar o componente Inspector em alguns dos descendentes TFrame (que se inscreverem como componentes paleta verdadeiros). Quando eu deixar esse componente no dado TFrame no entanto usá-lo, e compilar / instalar um pacote, recebo a "Não é possível carregar o pacote A, que contém unidade X, que também está contido no pacote B" erro. É agora claramente a causa, e eu posso recriar o problema sob demanda.

A sugestão de moobaa abaixo faz sentido, e ainda assim parece que mesmo que eu estou tentando fazer abordagem # 2 do que ele sugere, ele não funciona. o que estou perdendo? Parece que este deve ser factível e, na verdade, parece que a maioria dos pacotes que eu vi usar outros pacotes instalados o tempo todo (incluído o próprio VCL).

Nota: O pacote B não depende de um pacote, tanto quanto eu posso dizer (e eu instalei ele ficar sozinho, de modo que parece concordar).

(BTW, existem ferramentas para "traçar" as dependências de pacotes como este? Eu estou usando D2007)

Como sempre, obrigado pelo seu tempo e ajuda.

Foi útil?

Solução

Só porque você excluiu o componente não significa que você apagou o nome do módulo da cláusula USES -. Aqueles que não são apagados automaticamente

Outras dicas

Ele também poderia estar relacionado com esta pergunta .

Unidade X está claramente sendo ligada em ambos os pacotes. Há um par de maneiras de contornar isso:

  • criar um novo pacote (vamos chamá-lo Pacote C) com a Unidade X (e quaisquer outras dependências), então mudar Package A e B pacote para ambos uso Pacote C; ou ...
  • incluem Unidade X no Pacote B, e tem Pacote A utilização do pacote B (que é uma forma mais compacta da primeira solução).

Se os telespectadores são mencionados explicitamente no seu código Pacote B, então o Pacote B certamente deve estar usando Pacote A ( ie , deve haver uma dependência explícita lá). Se essa indicação de código compartilhado não é feito explicitamente, B irá compilar a sua própria versão do código em B, levando ao problema que você está vendo.

Agora, se essa dependência é OK, acrescentando uma referência ao pacote A partir Pacote B deve esclarecer este problema de imediato; afinal, B será "usando" o código no pacote A, e as mesmas unidades não vai ter compilado em dois pacotes. No entanto, se isto introduz referências circulares (não me lembro se A usa B ou não), então você pode ter um pouco de refatoração para a:}

Loren:. Requer cláusula, uma vez que é um .dpk, você não pode usa uma pacotes afaik

Eu simplesmente limpar o $ (BDSDIR) / projetos / dir, meus próprios projetos dir para remover B.dcp e todos DCU é para as unidades que estavam em B e, em seguida, reconstruir A.

Outra coisa a verificar se existe um componente registrado que depende de B.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top