Asignación de dependencias con mapas de código

En este artículo, aprenderá a visualizar las dependencias del código mediante mapas de código.

¿Qué son los mapas de código?

En Visual Studio, los mapas de código le ayudan a ver más rápidamente cómo encaja el código del programa sin leer archivos y líneas de código. Con estos mapas, puede ver la organización y las relaciones del código, incluida su estructura y sus dependencias, cómo actualizarla y calcular el costo de los cambios propuestos.

View dependencies with code maps in Visual Studio

Las dependencias de código se pueden asignar en los siguientes lenguajes:

  • Visual C# o Visual Basic .NET en una solución o ensamblados (.dll o .exe)

  • Código de C o C++ nativo o administrado en proyectos de Visual C++, archivos de encabezado (.h o #include) o archivos binarios

  • Proyectos y ensamblados de X++ creados desde módulos de .NET para Microsoft Dynamics AX

Nota

Para los proyectos que no son de C# o Visual Basic, hay menos opciones para iniciar un mapa de código o agregar elementos a un mapa de código existente. Por ejemplo, no podrá hacer clic con el botón secundario en un objeto en el editor de texto de un proyecto de C++ y agregarlo a un mapa de código. Sin embargo, puede arrastrar y colocar elementos de código individuales o archivos desde el Explorador de soluciones, la Vista de clases y el Examinador de objetos.

Requisitos previos

Para crear un mapa de código en Visual Studio, instale primero los componentes Mapa de código y Validación de dependencias en directo.

Para crear y editar mapas de código, necesita Visual Studio Enterprise. No obstante, en las ediciones Community y Professional de Visual Studio, puede abrir diagramas que se generaron en la edición Enterprise, pero no puede editarlos.

Nota

Antes de compartir los mapas creados en Visual Studio Enterprise con otros usuarios que usen Visual Studio Professional, asegúrese de que todos los elementos del mapa son visibles (por ejemplo, los elementos ocultos, los grupos expandidos y los vínculos entre grupos).

Incorporación de un mapa de código

Puede crear un mapa de código vacío y arrastrar elementos a él, como referencias de ensamblado, archivos y carpetas, o bien puede generar un mapa de código para toda la solución o parte de ella.

Para agregar un mapa de código vacío:

  1. En el Explorador de soluciones, abra el menú contextual del nodo de la solución de nivel superior. Elija Agregar>Nuevo elemento.

  2. En el cuadro de diálogo Agregar nuevo elemento, en Instalado, elija la categoría General.

  3. Elija la plantilla Documento de gráfico dirigido (.dgml) y, a continuación, seleccione Agregar.

    Sugerencia

    Es posible que esta plantilla no aparezca en orden alfabético, así que desplácese hacia abajo hasta la parte inferior de la lista de plantillas si no la ve.

    Aparece un mapa en blanco en la carpeta Elementos de la solución de su solución.

De forma similar, puede crear un nuevo archivo de mapa de código sin agregarlo a la solución seleccionando Arquitectura>Nuevo mapa de código o Archivo>Nuevo>Archivo.

Más información:

Generación de un mapa de código para la solución

Para ver todas las dependencias de la solución:

  1. En la barra de menús, seleccione Arquitectura>Generar mapa de código para la solución. Si el código no ha cambiado desde la última vez que se compiló, puede seleccionar Arquitectura>Generar mapa de código para una solución sin compilación en su lugar.

    Generate a code map command

    Se genera un mapa que muestra los ensamblados de nivel superior y los vínculos agregados entre ellos. Cuanto más amplio sea el vínculo agregado, más dependencias representará.

  2. Use el botón Leyenda situado en la barra de herramientas del mapa de código para mostrar u ocultar la lista de iconos de tipo de proyecto (por ejemplo, proyectos de prueba, web y teléfono), los elementos de código (por ejemplo, clases, métodos y propiedades) y los tipos de relación (por ejemplo, “Se hereda de”, “Implementa” y “Llama a”).

    Top-level dependency graph of assemblies

    Esta solución de ejemplo contiene carpetas de solución (Pruebas y Componentes), proyectos de prueba, proyectos web y ensamblados. De forma predeterminada, todas las relaciones de contención aparecen como gruposque se pueden expandir y contraer. El grupo Externos contiene cualquier elemento que esté fuera de la solución, incluidas las dependencias de plataforma. En los ensamblados externos solo se muestran los elementos que están en uso. De forma predeterminada, los tipos base del sistema están ocultos en el mapa para reducir la acumulación de elementos.

  3. Para profundizar en el mapa, expanda los grupos que representan proyectos y ensamblados. Puede expandir todo si presiona CTRL+A para seleccionar todos los nodos y, después, elige Grupo, Expandir en el menú contextual.

    Expanding all groups in a code map

  4. No obstante, puede que esto no resulte útil en el caso de soluciones grandes. De hecho, con soluciones complejas, las limitaciones de memoria pueden impedirle expandir todos los grupos. En su lugar, expanda un nodo individual para explorarlo. Mueva el puntero del mouse sobre el nodo y luego haga clic en el botón de contenido adicional (flecha hacia abajo) cuando aparezca.

    Expanding a node in a code map

    También puede usar el teclado: seleccione el elemento y luego presione la tecla más (+). Para explorar niveles de código más profundos, haga lo mismo para los espacios de nombres, los tipos y los miembros.

    Sugerencia

    Para más información sobre cómo trabajar con mapas de código mediante el mouse, el teclado y la entrada táctil, consulte Examinar y reorganizar mapas de código.

  5. Para simplificar el mapa y centrarse en partes individuales, elija Filtros en la barra de herramientas del mapa de código y seleccione únicamente los tipos de nodos y los vínculos que le interesan. Por ejemplo, puede ocultar todos los contenedores de la carpeta de soluciones y los ensamblados.

    Simplify the map by filtering containers

    Otra manera de simplificar el mapa es ocultar o quitar grupos y elementos individuales, sin que ello afecte al código subyacente de la solución.

  6. Para ver las relaciones entre los elementos, selecciónelos en el mapa. Los colores de los vínculos indican los tipos de relación, tal como se muestra en el panel Leyenda .

    View dependencies across your solutions

    En este ejemplo, los vínculos de color púrpura son llamadas, los vínculos con puntos son referencias y los vínculos de color azul claro son acceso a campos. Los vínculos verdes pueden ser herencia o pueden ser vínculos agregados que indican más de un tipo de relación (o categoría).

    Sugerencia

    Si ve un vínculo verde, podría no significar únicamente que hay una relación de herencia. También puede haber llamadas de método, ocultas por la relación de herencia. Para ver determinados tipos de vínculos, use las casillas del panel Filtros para ocultar los tipos que no le interesan.

  7. Para más información sobre un elemento o vínculo, mueva el puntero por encima hasta que aparezca información. De este modo se mostrarán los detalles de un elemento de código o las categorías que representa un vínculo.

    Show the categories of a relationship

  8. Para examinar los elementos y las dependencias representados por un vínculo agregado, primero seleccione el vínculo y luego abra su menú contextual. Elija Mostrar vínculos de contribución (o Mostrar vínculos de contribución en el nuevo mapa de código). De este modo se expanden los grupos en ambos extremos del vínculo y se muestran solo los elementos y dependencias que participan en el vínculo.

  9. Para centrarse en partes específicas del mapa, puede continuar quitando los elementos que no le interesan. Por ejemplo, para ver los detalles en la vista de clases y miembros, simplemente filtre todos los nodos de espacios de nombres en el panel Filtros .

    Drilling down to class and member level

  10. Otra manera de centrarse en un mapa de solución compleja consiste en generar un mapa nuevo que contenga los elementos seleccionados en un mapa existente. Mantenga presionada la tecla CTRL mientras selecciona los elementos en los que desea centrarse, abra el menú contextual y elija Nuevo gráfico desde selección.

    Show selected items on a new code map

  11. El contexto contenedor se traslada al nuevo mapa. Oculte las carpetas de soluciones y cualquier otro contenedor que no desee ver mediante el panel Filtros.

    Filter the containers to simplify the view

  12. Expanda los grupos y seleccione elementos en el mapa para ver las relaciones.

    Select items to view the relationships

Consulte también:

Visualización de dependencias

Suponga que debe realizar una revisión de código en unos archivos con cambios pendientes. Para ver las dependencias que hay en esos cambios, cree un mapa de código a partir de dichos archivos.

Show specific dependencies on a code map

  1. En Explorador de soluciones, seleccione los proyectos, referencias de ensamblado, carpetas, archivos, tipos o miembros que desee asignar.

    Select the items you want to map

  2. En la barra de herramientas del Explorador de soluciones, elija Mostrar en mapa de códigoCreate New Graph From Selected Nodes Button. O bien, abra el menú contextual de un elemento o un grupo de ellos y elija Mostrar en mapa de código.

    También puede arrastrar elementos desde el Explorador de soluciones, la vista de clases o el examinador de objetos a un mapa de código nuevo o ya existente. Para incluir la jerarquía primaria para sus elementos, mantenga presionada la tecla Ctrl mientras arrastra los elementos, o bien use el botón Incluir elementos primarios en la barra de herramientas del mapa de código para especificar la acción predeterminada. También puede arrastrar archivos de ensamblado desde fuera de Visual Studio, por ejemplo desde el Explorador de Windows.

    Nota

    Cuando se agregan elementos de un proyecto que se comparte entre varias aplicaciones, como Windows Phone o Microsoft Store, esos elementos aparecen en el mapa con el proyecto de aplicación activo actualmente. Si cambia el contexto a otro proyecto de aplicación y agrega más elementos del proyecto compartido, dichos elementos aparecerán ahora con el nuevo proyecto de aplicación activo. Las operaciones que se realizan con un elemento en el mapa solo se aplican a los elementos que comparten el mismo contexto.

  3. El mapa muestra los elementos seleccionados dentro de los ensamblados que los contienen.

    Selected items shown as groups on the map

  4. Para explorar los elementos, expándalos. Mueva el puntero del mouse sobre un elemento y luego haga clic en el botón de contenido adicional (flecha hacia abajo) cuando aparezca.

    Expand a node in a code map

    Para expandir todos los elementos, selecciónelos mediante Ctrl+A y, luego, abra el menú contextual del mapa y elija Grupo>Expandir. Sin embargo, esta opción no está disponible si el hecho de expandir todos los grupos genera un mapa que no se puede usar o problemas de memoria.

  5. Continúe expandiendo los elementos que le interesen hasta el nivel de clase y miembro si es necesario.

    Expand groups to class and member level

    Para ver los miembros que están en el código pero no aparecen en el mapa, haga clic en el icono Volver a obtener elementos secundariosRefetch Children Icon en la esquina superior izquierda de un grupo.

  6. Para ver más elementos relacionados con los del mapa, seleccione uno y elija Mostrar relacionados en la barra de herramientas del mapa de código, y luego seleccione el tipo de elementos relacionados que se agregarán al mapa. Si lo prefiere, seleccione uno o más elementos, abra el menú contextual y, después, elija la opción Mostrar para el tipo de elementos relacionados que desea agregar al mapa. Por ejemplo:

    Para un ensamblado, elija:

    Opción Descripción
    Mostrar ensamblados a los que este hace referencia Agregue los ensamblados a los que este ensamblado hace referencia. Los ensamblados externos aparecen en el grupo Externos .
    Mostrar ensamblados que hacen referencia a este Agregue los ensamblados de la solución que hacen referencia a este ensamblado.

    Para un espacio de nombres, elija Mostrar ensamblado contenedor, si no está visible.

    Para una clase o interfaz, elija:

    Opción Descripción
    Mostrar tipos base Para una clase, agregue la clase base, así como las interfaces implementadas.

    Para una interfaz, agregue las interfaces base.
    Mostrar tipos derivados Para una clase, agregue las clases derivadas.

    Para una interfaz, agregue las interfaces derivadas y las clases o structs de implementación.
    Mostrar tipos a los que este hace referencia Agregue todas las clases y los miembros que esta clase utilice.
    Mostrar tipos que hacen referencia a este Agregue todas las clases y los miembros que usan esta clase.
    Mostrar espacio de nombres contenedor Agregue el espacio de nombres primario.
    Mostrar espacio de nombres y ensamblado contenedores Agregue la jerarquía de contenedores principales.
    Mostrar todos los tipos base Agregue la jerarquía de interfaz o de clase base de forma recursiva.
    Mostrar todos los tipos derivados Para una clase, agregue todas las clases derivadas de forma recursiva.

    Para una interfaz, agregue todas las interfaces derivadas y clases o structs de implementación de forma recursiva.

    Para un método, elija:

    Opción Descripción
    Mostrar métodos a los que este llama Agregue los métodos a los que llama este método.
    Mostrar campos a los que este hace referencia Agregue los campos a los que hace referencia este método.
    Mostrar tipo contenedor Agregue el tipo primario.
    Mostrar tipo, espacio de nombres y ensamblado contenedores Agregue la jerarquía de contenedores principales.
    Mostrar métodos invalidados Para obtener un método que invalide otros métodos o que implemente un método de una interfaz, agregue todo el resumen o los métodos virtuales en las clases base invalidadas y, si existe, el método de interfaz implementado.

    Para un campo o propiedad, elija:

    Opción Descripción
    Mostrar tipo contenedor Agregue el tipo primario.
    Mostrar tipo, espacio de nombres y ensamblado contenedores Agregue la jerarquía de contenedores principales.

    Show methods called by this member

  7. El mapa muestra las relaciones. En este ejemplo, el mapa muestra los métodos llamados por el método Find y su ubicación en la solución o externa.

    Show specific dependencies on a code map

  8. Para simplificar el mapa y centrarse en partes individuales, elija Filtros en la barra de herramientas del mapa de código y seleccione únicamente los tipos de nodos y los vínculos que le interesan. Por ejemplo, desactive la visualización de carpetas de soluciones, ensamblados y espacios de nombres.

    Use the Filter pane to simplify the display