none
Referência de um assembly do tipo executável RRS feed

  • Pergunta

  • Tenho um assembly de um projeto referenciado no meu projeto (não é um class library, é um .exe adicionado as referencias), porém agora eu quero buscar todos os Types desta referência, só que o problema é que o comando Assembly.GetReferencedAssemblies() não trás as referências do tipo .exe, ele trás apenas do .dll

    Alguém tem ideia de como fazer as referências do tipo .exe também ?

    terça-feira, 30 de outubro de 2012 19:04

Respostas

Todas as Respostas

  • Em algum momento você usa algum tipo do assembly referenciado (exe) dentro do teu código? Caso você não use o compilador ignora essa referência e o método GetReferencedAssemblies() não trará mesmo. (Mais) (Mais um pouco)


    terça-feira, 30 de outubro de 2012 19:17
  • Eu quero a referência, justamente pra utilizar, pra listar todos componentes (types) existentes dentro dessa referência...
    terça-feira, 30 de outubro de 2012 19:26
  • Então se você não utilizou nenhuma classe do exe no teu projeto o compilador vai ignorar essa referência. Você ainda pode carregar esse exe dinamicamente em runtime com o Assembly.LoadFile(...)
    terça-feira, 30 de outubro de 2012 19:29
  • Utilizei algumas classes da referência e mesmo assim o GetReferencedAssemblies() continua trazendo apenas as referências .dll... as referências .exe o método não trás...
    quarta-feira, 31 de outubro de 2012 10:26
  • Certo Luciano,

    peguei a referência utilizando o LoadFile, agora preciso dar um foreach nos "types" e adicionar em um atributo, desta forma:

    var types = newList<Type>();

    string path = "C://Teste/bin/Debug/teste.exe";
     
    var externalRerference = Assembly.LoadFile(path);

    foreach (var type in externalRerference.GetTypes()) {         types.Add(type); }

    Porém.. quando vai iniciar a execução dentro do foreach eu tenho o seguinte erro:

    Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

    Sabe por acaso o motivo de estar apresentando este erro ? pq não posso utilizar o GetTypes() ?

    quarta-feira, 31 de outubro de 2012 13:10
  • Teria que dar uma olhada na inner exception. Lá diz alguma coisa. Provavelmente o assembly 'teste.exe' tem outras dependências que não foram carregadas.
    quarta-feira, 31 de outubro de 2012 14:20
  • pois é.. mas a Inner Exception está vindo null! haha que beleeeza
    quarta-feira, 31 de outubro de 2012 15:32
  • mas não sei se é isto não.. a principio todas as referências do projeto externo também existem neste projeto...
    quarta-feira, 31 de outubro de 2012 15:35
  • Alguém sabe como eu consigo "pegar" uma referência do tipo ".exe" e "listar" todos seus componentes? utilizando reflexão talvez...
    quarta-feira, 31 de outubro de 2012 17:44
  • Eu consegui recuperar apenas as referências do tipo .dll mesmo... .exe não teve jeito!

    Eu consegui utilizando o seguinte código:

    var assemblies2 = AppDomain.CurrentDomain.GetAssemblies();

    foreach (var assembly in assemblies2) {         AssemblyName[] referencedAssemblies = assembly.GetReferencedAssemblies(); }

    quinta-feira, 1 de novembro de 2012 16:38
  • Olá Giuvane,

    Fiz um teste mais cedo colocando a referência a um exe no projeto e consegui acessar normalmente os seus tipos. O assembly que você está referenciando é um assembly .NET ou COM? Você consegue reproduzir o comportamento em um projeto novo? (Criando 2 assemblies, colocando a referência e buscando pelo GetReferencedAssemblies())

    quinta-feira, 1 de novembro de 2012 16:39
  • Boa tarde Luciano,

    cara, estou na seguinte situação, estou carregando o assembly externo, do tipo ClassLibrary mesmo, porém quando eu capturar os componentes do assembly, utilizando o comando assembly.GetTypes() está disparando a seguinte exceção:

    Unable to cast COM object of type 'System.__ComObject' to interface type 'IAssemblyCache'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{E707DCDE-D1CD-11D2-BAB9-00C04F8ECEAE}' failed due to the following error: Não há suporte para esta interface (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

    sabe o que pode estar causando isso?

    terça-feira, 6 de novembro de 2012 15:59
    • Marcado como Resposta Giuvane Conti quinta-feira, 8 de novembro de 2012 17:14
    quarta-feira, 7 de novembro de 2012 10:26