Em .Net, gostaria de enumerar todos os assemblies carregados em todos os AppDomains. Fazer isso para o AppDomain do meu programa é bastante fácil AppDomain.CurrentDomain.GetAssemblies()
. Eu preciso acessar de alguma forma cada AppDomain? Ou já existe uma ferramenta que faz isso?
c#
.net
assemblies
Abtin Forouzandeh
fonte
fonte
GetAssemblies()
não funcionará, pois não é recursivo e perderá todas as referências de assembly aninhado. Eu adicionei uma versão recursiva deGetAssemblies()
em stackoverflow.com/questions/383686/… .AppDomain.CurrentDomain.GetAssemblies()
está perfeitamente bem. Ele não precisa percorrer as referências recursivamente, porque não está enumerando as referências em primeiro lugar.Respostas:
Usando Visual Studio
Isso fornece detalhes sobre cada assembly, domínio do aplicativo e tem algumas opções para carregar símbolos (ou seja, arquivos pdb que contêm informações de depuração).
Usando o Process Explorer
Se você quiser uma ferramenta externa, pode usar o Process Explorer (freeware, publicado pela Microsoft)
Clique em um processo e aparecerá uma lista com todas as montagens utilizadas. A ferramenta é muito boa, pois mostra outras informações, como identificadores de arquivo, etc.
Programaticamente
Verifique esta pergunta do SO que explica como fazer isso.
fonte
Aqui está o que eu terminei. É uma lista de todas as propriedades e métodos, e listei todos os parâmetros de cada método. Não tive sucesso em obter todos os valores.
fonte
foreach(Type type in asm.GetTypes()){ if ((type.ToString().IndexOf("ACLASSIMLOOKINGFOR")>=0) || (type.ToString().IndexOf("BCLASSIMLOOKINGFOR")>=0)){...