Partilhar via


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.

Ver dependências com mapas de códigos no Visual Studio

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ários

  • Projetos 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:

  1. No Gerenciador de Soluções, abra o menu de atalho para o nó da solução de nível superior. Escolha Adicionar>Novo Item.

  2. Na caixa de diálogo Adicionar Novo Item, em Instalado, escolha a categoria Geral.

  3. 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:

Gerar um mapa de código para sua solução

Para ver todas as dependências em sua solução:

  1. 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.

    Comando para gerar um mapa de códigos

    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.

  2. 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).

    Grafo de dependência de nível superior de assemblies

    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.

  3. 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.

    Expandindo todos os grupos em um mapa de códigos

  4. 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.

    Expandindo um nó em um mapa de códigos

    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.

  5. 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.

    Simplificar o mapa filtrando contêineres

    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.

  6. 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.

    Ver dependências entre suas soluções

    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.

  7. 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.

    Mostrar as categorias de uma relação

  8. 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.

  9. 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.

    Fazer drill down até o nível de classe e membro

  10. 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.

    Mostrar itens selecionados em um novo mapa de códigos

  11. 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.

    Filtrar os contêineres para simplificar a exibição

  12. Expanda os grupos e selecione itens no mapa para ver as relações.

    Selecionar itens para ver as relações

Veja também:

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.

Mostrar dependências específicas em um mapa de códigos

  1. 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.

    Selecionar os itens que você deseja mapear

  2. Na barra de ferramentas do Gerenciador de Soluções, escolha Mostrar no Mapa de Códigos Botão Criar Novo Gráfico com base nos Nós Selecionados. 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.

  3. O mapa mostra os itens selecionados nos assemblies que os contêm.

    Itens selecionados mostrados como grupos no mapa

  4. 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.

    Expandir um nó em um mapa de códigos

    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.

  5. Continue expandindo os itens nos quais você esteja interessado, até o nível de classe e membro, se necessário.

    Expandir grupos até o nível de classe e membro

    Para ver os membros que estão no código, mas não aparecem no mapa, clique no ícone Atualizar FilhosÍcone Atualizar Filhos no canto superior esquerdo de um grupo.

  6. 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.

    Mostrar métodos chamados por este membro

  7. 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.

    Mostrar dependências específicas em um mapa de códigos

  8. 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.

    Usar o painel Filtro para simplificar a exibição