Ir para conteúdo
Fórum Script Brasil
  • 0

External Dll Conflitos De Versoes


Thiago Alencar

Pergunta

Hello,

I've had made a dll out of a class that makes use of ZedGraph dll. I simply added the ZedGraph dll inside my project, and it works fine.. until you need to use the same dll with different version.

Should it be dinamically linked so that I include my dll's ZedGraph dependency manually every project that uses it?

For example, if someone later wanted to use my dll with a different version of ZedGraph dll in a project, then an exception like this would be thrown:

The file or Assembly ZedGraph, Version=5.0.8.21916, Culture=neutral, PublicKeyToken=02a83cbd123fcd60 or a dependence on that was found not. The found manifesto definition of the Assembly does not agree with the Assemblyverweis. (Exception to HRESULT: 0x80131040)

Anyone knows anything about dll versioning ? or how I could "hide" the zedgraph.dll inside my dll so that it doesnt interfere with projects that want to use newer versions of zedgraph.dll ??

I appreciate your attention,

Thiago.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Hello,

I've had made a dll out of a class that makes use of ZedGraph dll. I simply added the ZedGraph dll inside my project, and it works fine.. until you need to use the same dll with different version.

Should it be dinamically linked so that I include my dll's ZedGraph dependency manually every project that uses it?

For example, if someone later wanted to use my dll with a different version of ZedGraph dll in a project, then an exception like this would be thrown:

The file or Assembly ZedGraph, Version=5.0.8.21916, Culture=neutral, PublicKeyToken=02a83cbd123fcd60 or a dependence on that was found not. The found manifesto definition of the Assembly does not agree with the Assemblyverweis. (Exception to HRESULT: 0x80131040)

Anyone knows anything about dll versioning ? or how I could "hide" the zedgraph.dll inside my dll so that it doesnt interfere with projects that want to use newer versions of zedgraph.dll ??

I appreciate your attention,

Thiago.

Link para o comentário
Compartilhar em outros sites

  • 0

Can you make use of ZedGraph using late-binding? As far as I know, using late-binding is the best way to provide version-free use of dynamic linked libraries. But, as I've never used ZedGraph, I can't assure you that this is possible.

Hugs,

Graymalkin

PS: Moving to .NET. And, your name seems brazillian-like, so... why the hell are we speaking (writing) in English? :lol:

Link para o comentário
Compartilhar em outros sites

  • 0

Ola Graymalkin,

sou Brasileiro sim ;) , não tive tempo de traduzir o post para portugues (estava postando a mesma mensagem em varios foruns). Estou atualmente trabalhando na Alemanha e, uso os forums em ingles porque ainda não estou acostumado com o Alemao.

mas voltando ao assunto, tive esse problema e não estava conseguindo resposta nenhuma.. minha ultima tentativa foi aqui e espero que possa me ajudar.

So para voce ter nocao, estava pensando ate em recompilar a dll ZedGraph inteira com um outro nome ou algo do tipo para que não desse conflitos nos projetos onde sera usada com outra ZedGraph dll.

Segundo a Microsoft: "The Visual Basic compiler performs a process called binding when an object is assigned to an object variable."

Voce sabe exatamente como funciona o processo de linkar minha dll em run-time para que eu consiga a compilar, mas usando dois arquivos (dlls) separados? (sem a ZedGraph.dll ser copiada junto da minha por ex.)

Se eu remover a ZedGraph.dll do projeto da minha dll não consigo compila-la, claro. Mas acredito que haja alguma forma de carrega-la during run-time, porem não encontrei uma nenhuma documentacao clara de como fazer isto.

Para piorar a situacao o Microsoft Visual Studio não possui opcao para criar modulos e linkar dlls (pelos menos no framework 2 que estou usando). Teria que fazer isto utilizando opcoes do compilador pela linha de comando, e com utilitarios tipo o AL.exe (assembly linker).

Qualquer dica que tiver esta valendo..

Danke!

PS.: aff.. são 5 horas de diferenca daqui para o Brasil .. :o

Editado por Thiago Alencar
Link para o comentário
Compartilhar em outros sites

  • 0

Então, a ZedGraph é uma DLL .net? Caso positivo, acredito que uma maneira de carregá-la em run-time seria usando Reflection. Vou fazer uns testes aqui e postarei o resultado.

Abraços,

Graymalkin

-- EDITADO --

Sim, realmente dá certo usando Reflection. No exemplo abaixo eu carrego uma biblioteca em tempo de execução (MinhaBiblioteca.dll) e crio um objeto a partir de uma classe existente nela (MinhaClasse). Note que por "obj" ser do tipo Object e pelo fato do VB possuir late-binding, qualquer método ou propriedade utilizado será resolvido em tempo de execução.

Dim a As Reflection.Assembly = Reflection.Assembly.LoadFile("C:\pasta\MinhaBiblioteca.dll")
Dim tipo As Type = a.GetType("MinhaBiblioteca.MinhaClasse")

Dim obj As Object = Activator.CreateInstance(tipo)

obj.MeuMétodo()

Então, basta você adequar isso ao seu código. Se você não souber o nome completo do tipo (classe) a ser passado para a.GetType("...") você pode obter todos com a.GetTypes() (note o plural) e procurar o nome da classe desejada.

Bom, qualquer dúvida, 'stamos aí.

Umarmen,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...