Mapear as dependências com mapas de código
Neste artigo, você aprenderá a visualizar dependências em seu código com mapas de códigos.
O que são mapas de códigos?
No Visual Studio, os mapas de códigos ajudam você a ver mais rapidamente como o código do programa se ajusta sem ler arquivos nem linhas de código. Com esses mapas, você pode ver a organização e as relações em seu código, incluindo a estrutura e suas dependências, saber como atualizá-las e estimar o custo de alterações propostas.
Você pode mapear dependências de código nestas linguagens:
Visual C# .NET ou Visual Basic em uma solução ou assemblies (.dll ou .exe)
Código C ou C++ nativo ou gerenciado em projetos do Visual C++, arquivos de cabeçalho (.h ou
#include
) ou bináriosProjetos e assemblies do X++ feitos com base nos módulos do .NET para Microsoft AX Dynamics
Observação
Para projetos diferentes do C# ou Visual Basic, há menos opções para iniciar um mapa de códigos ou adicionar itens a um mapa de códigos existente. Por exemplo, você não pode clicar com o botão direito do mouse em um objeto no editor de texto de um projeto C++ e adicioná-lo a um mapa de códigos. No entanto, você pode arrastar e soltar elementos de código individuais ou arquivos do Gerenciador de Soluções, do Modo de Exibição de Classe e do Pesquisador de Objetos.
Pré-requisitos
Para criar um mapa de códigos no Visual Studio, primeiro instale os componentes Mapa do Códigos e Validação de Dependência Dinâmica
Para criar e editar mapas de códigos, você precisa da edição Visual Studio Enterprise. No entanto, nas edições Visual Studio Community e Professional, você pode abrir diagramas que foram gerados na edição Enterprise, mas não é possível editá-los.
Observação
Antes de compartilhar mapas criados no Visual Studio Enterprise com outras pessoas que usam o Visual Studio Professional, verifique se todos os itens no mapa (como itens ocultos, grupos expandidos e links entre grupos) estão visíveis.
Adicionar um mapa de códigos
Você pode criar um mapa de códigos vazio e arrastar itens até ele, incluindo referências de assembly, arquivos e pastas, ou pode gerar um mapa de códigos para toda ou parte de sua solução.
Para adicionar um mapa de códigos vazio:
No Gerenciador de Soluções, abra o menu de atalho para o nó da solução de nível superior. Escolha Adicionar>Novo Item.
Na caixa de diálogo Adicionar Novo Item, em Instalado, escolha a categoria Geral.
Escolha o modelo Documento Gráfico Direcionado(.dgml) e, em seguida, selecione Adicionar.
Dica
Talvez esse modelo não apareça em ordem alfabética, portanto, role para baixo até a parte inferior da lista de modelos se você não o vir.
Um mapa em branco aparece na pasta Itens da Solução da solução.
Da mesma forma, você pode criar um arquivo de mapa de códigos sem adicioná-lo à solução selecionando Arquitetura>Novo Mapa de Códigos ou Arquivo>Novo>Arquivo.
Saiba mais:
- Compartilhar mapas de códigos
- Criar mapas de código para o C++
- Aprimorar o desempenho do mapa de códigos
Gerar um mapa de código para sua solução
Para ver todas as dependências em sua solução:
Na barra de menus, escolha Arquitetura>Gerar Mapa de Códigos para a Solução. Se o código não tiver sido alterado desde a última vez que o compilou, você poderá selecionar Arquitetura>Gerar Mapa de Códigos para a Solução sem Compilação.
Um mapa é gerado mostrando os assemblies de nível superior e os links agregados entre eles. Quanto maior o vínculo agregado, mais dependências ele representa.
Use o botão Legenda na barra de ferramentas do mapa de códigos para mostrar ou ocultar a lista de ícones de tipo de projeto (como Teste, Web e Projeto de Telefone), itens de código (como Classes, Métodos e Propriedades) e tipos de relação (como Herda de, Implementa e Chamadas).
Esta solução de exemplo contém Pastas da Solução (Testes e Componentes), Projetos de Teste, Projetos Web e assemblies. Por padrão, todas as relações de independência aparecem como grupos, que podem ser expandidos ou recolhidos. O grupo Externos contém os itens que ficam fora da solução, inclusive dependências de plataforma. Os assemblies externos mostram apenas os itens usados. Por padrão, os tipos base do sistema ficam ocultos no mapa para reduzir a confusão.
Para fazer uma busca detalhada no mapa, expanda os grupos que representam projetos e assemblies. Você pode expandir tudo pressionando CTRL+A para selecionar todos os nós e, em seguida, escolher Grupo, Expandir no menu de atalho.
No entanto, isso pode não ser útil em uma solução grande. Na verdade, em soluções complexas, as limitações de memória podem impedir que você expanda todos os grupos. Em vez disso, para ver dentro de um nó específico, expanda-o. Mova o ponteiro do mouse sobre o nó e clique na divisa (seta para baixo) quando ela aparecer.
Ou use o teclado selecionando o item e pressionando a tecla de mais (+). Para explorar níveis mais profundos do código, faça o mesmo para namespaces, tipos e membros.
Dica
Para obter mais detalhes sobre como trabalhar com mapas de código usando o mouse, o teclado e o toque, confira Procurar e reorganizar mapas de códigos.
Para simplificar o mapa e se concentrar em partes específicas, escolha Filtros na barra de ferramentas do mapa de códigos e selecione apenas os tipos de nós e links nos quais você está interessado. Por exemplo, você pode ocultar todos os contêineres de Pasta da Solução e Assemblies.
Você também pode simplificar o mapa ocultando ou removendo grupos e itens específicos do mapa, sem afetar o código da solução subjacente.
Para ver as relações entre os itens, selecione-os no mapa. As cores dos links indicam os tipos de relação, conforme mostrado no painel Legenda.
Neste exemplo, os links roxos são chamadas, os links pontilhados são referências e os links azuis claros são acesso ao campo. Links verdes podem ser herança ou podem ser links de agregação que indicam mais de um tipo de relação (ou categoria).
Dica
Se você vir um link verde, ele pode não significar que exista apenas uma relação de herança. Também podem ser chamadas de método, mas estão ocultas pela relação de herança. Para ver tipos específicos de links, use as caixas de seleção no painel Filtros para ocultar os tipos nos quais você não está interessado.
Para obter mais informações sobre um item ou um link, mova o ponteiro sobre o ele até que uma dica de ferramenta seja exibida. Isso mostra detalhes de um elemento de código ou das categorias que um link representa.
Para examinar itens e dependências representados por um link agregado, selecione o link primeiro e, em seguida, abra o menu de atalho. Escolha Mostrar Links Participantes (ou Mostrar Links Participantes no Novo Mapa de Códigos). Essa ação expande os grupos em ambas as extremidades do link e mostra apenas esses itens e dependências que participam do link.
Para se concentrar em partes específicas do mapa, você pode continuar removendo itens em que não esteja interessado. Por exemplo, para detalhar a exibição de classe e membro, basta filtrar todos os nós de namespace no painel Filtros.
Outra maneira de se concentrar em um mapa de solução complexo é gerar um novo mapa contendo itens selecionados de um mapa existente. Segure Ctrl ao selecionar os itens nos quais deseja se concentrar, abra o menu de atalho e escolha Novo Gráfico com base na Seleção.
O contexto contido é levado para o novo mapa. Oculte Pastas da Solução e outros contêineres que você não deseja ver usando o painel Filtros.
Expanda os grupos e selecione itens no mapa para ver as relações.
Veja também:
- Procurar e reorganizar mapas de código
- Personalizar mapa de códigos editando os arquivos DGML
- Encontre possíveis problemas em seu código executando um analisador
Exibir dependências
Suponha que você tenha que realizar uma revisão de código em alguns arquivos com alterações pendentes. Para ver as dependências nessas alterações, você pode criar um mapa de códigos com base nesses arquivos.
No Gerenciador de Soluções, selecione os projetos, as referências de assembly, as pastas, os arquivos, os tipos ou membros que você deseja mapear.
Na barra de ferramentas do Gerenciador de Soluções, escolha Mostrar no Mapa de Códigos . Ou abra o menu de atalho para um ou um grupo de itens e escolha Mostrar no Mapa do Códigos.
Você também pode arrastar itens do Gerenciador de Soluções, do Modo de Exibição de Classe ou do Pesquisador de Objetos para um mapa de códigos novo ou existente. Para incluir a hierarquia pai para seus itens, pressione e segure a tecla Ctrl enquanto arrasta itens ou use o botão Incluir Pais na barra de ferramentas do mapa de códigos para especificar a ação padrão. Você também pode arrastar arquivos de assembly de fora do Visual Studio, como do Windows Explorer.
Observação
Quando você adiciona itens de um projeto compartilhado entre vários aplicativos, como Windows Phone ou Microsoft Store, esses itens são exibidos no mapa com o projeto de aplicativo ativo no momento. Se você alterar o contexto para outro projeto de aplicativo e adicionar mais itens do projeto compartilhado, esses itens agora serão exibidos com o projeto de aplicativo recém-ativo. Operações realizadas com um item no mapa se aplicam apenas aos itens que compartilham o mesmo contexto.
O mapa mostra os itens selecionados nos assemblies que os contêm.
Para explorar itens, expanda-os. Passe o ponteiro do mouse sobre um item e, em seguida, clique no botão de divisa (seta para baixo) quando ele for exibido.
Para expandir todos os itens, selecione-os usando Ctrl+A, abra o menu de atalho do mapa e escolha Grupo>Expandir. No entanto, essa opção não estará disponível se a expansão de todos os grupos criar um mapa inutilizável ou causar problemas de memória.
Continue expandindo os itens nos quais você esteja interessado, até o nível de classe e membro, se necessário.
Para ver os membros que estão no código, mas não aparecem no mapa, clique no ícone Atualizar Filhos no canto superior esquerdo de um grupo.
Para ver mais itens relacionados aos que estão no mapa, selecione um e escolha Mostrar Relacionados na barra de ferramentas do mapa de códigos e selecione o tipo de itens relacionados a serem adicionados ao mapa. Como alternativa, selecione um ou mais itens, abra o menu de atalho e escolha a opção Mostrar para o tipo de itens relacionados a serem adicionados ao mapa. Por exemplo:
No caso de um assembly, escolha:
Opção Descrição Mostrar Assemblies Referenciados por Este Adicione assemblies a que este assembly faz referência. Os assemblies externos aparecem no grupo Externos. Mostrar Assemblies que Fazem Referência a Este Adicione assemblies na solução que fazem referência a este assembly. Para um namespace, escolha Mostrar Assembly que o contém, se ele não estiver visível.
Para uma classe ou interface, escolha:
Opção Descrição Mostrar Tipos Base Para obter uma classe, adicione a classe base e as interfaces implementadas.
Para obter uma interface, adicione as interfaces de base.Mostrar Tipos Derivados Para obter uma classe, adicione as classes derivadas.
Para obter uma interface, adicione as interfaces derivadas e as classes de implementação ou structs.Mostrar Tipos Referenciados por Este Adicione todas as classes e os membros que essa classe usa. Mostrar Tipos que Fazem Referência a Este Adicione todas as classes e seus membros que usam essa classe. Mostrar Namespace que o contém Adicione o namespace pai. Mostrar Namespace e Assembly Recipientes Adicione a hierarquia do contêiner pai. Mostrar Todos os Tipos Base Adicione a classe base ou a hierarquia de interface recursivamente. Mostrar todos os tipos derivados Para obter uma classe, adicione todas as classes derivadas recursivamente.
Para obter uma interface, adicione todas as interfaces derivadas e as classes de implementação ou structs recursivamente.No caso de um método, escolha:
Opção Descrição Mostrar Métodos Chamados por Este Adicione métodos que esse método chama. Mostrar Campos Referenciados por Este Adicione campos a que este método faz referência. Mostrar Tipo Recipiente Adicione o tipo pai. Mostrar Tipo Recipiente Adicione a hierarquia do contêiner pai. Mostrar Métodos Substituídos Para obter um método que substitui outros métodos ou implementa o método de uma interface, adicione todos os métodos abstratos ou virtuais em classes base que sejam substituídas e, se houver algum, o método da interface implementado. Para um campo ou uma propriedade, escolha:
Opção Descrição Mostrar Tipo Recipiente Adicione o tipo pai. Mostrar Tipo Recipiente Adicione a hierarquia do contêiner pai. O mapa mostra as relações. Neste exemplo, o mapa mostra os métodos chamados pelo método
Find
e sua localização na solução ou externamente.Para simplificar o mapa e se concentrar em partes específicas, escolha Filtros na barra de ferramentas do mapa de códigos e selecione apenas os tipos de nós e links nos quais você está interessado. Por exemplo, desative a exibição de Pastas da Solução, Assemblies e Namespaces.
Conteúdo relacionado
- Compartilhar mapas de códigos
- Criar mapas de código para o C++
- Aprimorar o desempenho do mapa de códigos
- Usar mapas de códigos para depurar aplicativos
- Mapear métodos na pilha de chamadas ao depurar
- Encontrar possíveis problemas usando analisadores de mapa de códigos
- Procurar e reorganizar mapas de código
- Personalizar mapa de códigos editando os arquivos DGML