Validación código con diagramas de dependencia
Motivos para usar diagramas de dependencia
Para asegurarse de que el código no entre en conflicto con el diseño, puede validarlo con diagramas de dependencia en Visual Studio. Esto puede ser útil para:
Encontrar los conflictos entre las dependencias del código y las dependencias del diagrama de dependencia.
Encontrar dependencias que podrían verse afectadas por los cambios propuestos.
Por ejemplo, puede modificar el diagrama de dependencia para mostrar los posibles cambios de la arquitectura y validar el código para ver las dependencias afectadas.
Refactorizar o migrar el código a un diseño diferente.
Encontrar código o dependencias que requieran trabajo al cambiar el código a una arquitectura diferente.
Requisitos
Visual Studio
Para crear un diagrama de dependencia para un proyecto de .NET Core, debe tener Visual Studio 2019, versión 16.2 o posterior.
Una solución que tenga un proyecto de modelado con un diagrama de dependencia. Este diagrama de dependencia debe vincularse a artefactos de proyectos de C# o Visual Basic que quiera validar. Vea Creación de diagramas de dependencia a partir del código.
Para ver qué ediciones de Visual Studio admiten esta característica, consulte Compatibilidad de ediciones con las herramientas de arquitectura y modelado.
Puede validar código manualmente desde un diagrama de dependencia abierto en Visual Studio o desde un símbolo del sistema. También puede validar código automáticamente al ejecutar compilaciones locales o compilaciones de Azure Pipelines.
Importante
Si quiere ejecutar la validación de capa mediante Team Foundation Server (TFS), debe instalar también la misma versión de Visual Studio en el servidor de compilación.
Validación de dependencias en vivo
La validación de dependencias se produce en tiempo real y los errores se muestran inmediatamente en la ventana Lista de errores.
La validación en tiempo real es compatible con C# y Visual Basic.
Para habilitar el análisis completo de la solución al usar la validación de dependencias en vivo, abra la configuración de las opciones de la barra dorada que aparece en la ventana Lista de errores.
- Puede descartar permanentemente la barra dorada si no le interesa ver todos los problemas de arquitectura de la solución.
- Si no habilita el análisis completo de la solución, el análisis solo se realiza para los archivos que se están editando.
Al actualizar los proyectos para habilitar la validación en tiempo real, un cuadro de diálogo muestra el progreso de la conversión.
Al actualizar un proyecto para la validación de dependencias en vivo, la versión del paquete NuGet se actualiza para que sea la misma para todos los proyectos y es la versión más reciente en uso.
Agregar un nuevo proyecto de validación de dependencias desencadena una actualización del proyecto.
Ver si un elemento admite validación
Puede vincular capas a sitios web, documentos de Office, archivos de texto sin formato y archivos de proyectos que se comparten entre varias aplicaciones, pero el proceso de validación no los incluirá. Los errores de validación no aparecerán para las referencias a proyectos o ensamblados que están vinculados a capas independientes cuando no aparece ninguna dependencia entre esas capas. Tales referencias no se consideran dependencias a menos que el código utilice esas referencias.
En el diagrama de dependencia, seleccione una o varias capas, haga clic con el botón derecho en su selección y, después, haga clic en Ver vínculos.
En el Explorador de capas, examine la columna Admite validación. Si el valor es false, el elemento no admite la validación.
Incluir otros ensamblados y proyectos de .NET para su validación
Al arrastrar los elementos al diagrama de dependencia, se agregan automáticamente a la carpeta Referencias de capa del proyecto de modelado las referencias a los ensamblados o proyectos de .NET correspondientes. Esta carpeta contiene referencias a los ensamblados y proyectos que se analizan durante la validación. Puede incluir otros ensamblados y proyectos de .NET para validación sin arrastrarlos manualmente al diagrama de dependencia.
En el Explorador de soluciones, haga clic con el botón derecho en el proyecto de modelado o en la carpeta Referencias de capa y, después, haga clic en Agregar referencia.
En el cuadro de diálogo Agregar referencia, seleccione los ensamblados o proyectos y, a continuación, haga clic en Aceptar.
Validar código manualmente
Si tiene un diagrama de dependencia abierto vinculado a elementos de la solución, puede ejecutar el comando de acceso directo Validar desde el diagrama. También puede usar el símbolo del sistema para ejecutar el comando msbuild con la propiedad personalizada /p:ValidateArchitecture establecida en True. Por ejemplo, cuando haga cambios en el código, realice la validación de capas con regularidad para detectar pronto los conflictos de dependencia.
Validación del código de un diagrama de dependencia abierto
Haga clic con el botón derecho en la superficie del diagrama y, después, haga clic en Validar arquitectura.
Nota
De forma predeterminada, la propiedad Acción de compilación del archivo de diagrama de dependencia (.layerdiagram) se establece en Validar para que el diagrama se incluya en el proceso de validación.
La ventana Lista de errores notifica los errores que se producen. Para obtener más información sobre los errores de validación, consulte Solución de problemas de validación de capas.
Para ver el origen de cada error, haga doble clic en el error en la ventana Lista de errores.
Nota
Visual Studio podría mostrar un mapa de código en lugar del origen del error. Esto se produce cuando el código tiene una dependencia en un ensamblado que el diagrama de dependencia no especifica, o al código le falta una dependencia que el diagrama de dependencia especifica. Revise el mapa de código o el código para determinar si debe existir la dependencia. Para obtener más información sobre los mapas de código, vea Asignación de dependencias en las soluciones.
Para administrar errores, consulte Resolución de errores de validación de capas.
Validación del código en el símbolo del sistema
Abra el símbolo del sistema de Visual Studio.
Elija alguna de las acciones siguientes:
Para validar el código comparándolo con un proyecto de modelado concreto en la solución, ejecute MSBuild con la siguiente propiedad personalizada.
msbuild <FilePath+ModelProjectFileName>.modelproj /p:ValidateArchitecture=true
O bien
Vaya a la carpeta que contiene el archivo de proyecto de modelado (.modelproj) y el diagrama de capas dependencia y, después, ejecute MSBuild con la siguiente propiedad personalizada:
msbuild /p:ValidateArchitecture=true
Para validar el código comparándolo con todos los proyectos de modelado de la solución, ejecute MSBuild con la siguiente propiedad personalizada.
msbuild <FilePath+SolutionName>.sln /p:ValidateArchitecture=true
O bien
Vaya a la carpeta de soluciones, que debe contener un proyecto de modelado que contiene un diagrama de dependencia y, después, ejecute MSBuild con la siguiente propiedad personalizada:
msbuild /p:ValidateArchitecture=true
Se mostrará cualquier error que se produzca. Para obtener más información sobre MSBuild, consulte MSBuild y MSBuild (Tarea).
Para obtener más información sobre los errores de validación, consulte Solución de problemas de validación de capas.
Administrar errores de validación
Durante el proceso de desarrollo, puede que desee suprimir algunos de los conflictos notificados durante la validación. Por ejemplo, es posible que desee suprimir errores de los que ya se ha ocupado o que no son pertinentes para su escenario concreto. Cuando se suprime un error, conviene registrar un elemento de trabajo en Team Foundation.
Advertencia
Ya debe estar conectado al control de código fuente TFS (SCC) para crear o vincular a un elemento de trabajo. Si intenta abrir una conexión a un SCC TFS diferente, Visual Studio cierra automáticamente la solución actual. Asegúrese de que ya está conectado al SCC apropiado antes de intentar crear o vincular a un elemento de trabajo. En las versiones posteriores de Visual Studio, los comandos de menú no están disponibles si no está conectado a un SCC.
Creación de un elemento de trabajo para un error de validación
- En la ventana Lista de errores, haga clic con el botón derecho en el error, elija Crear elemento de trabajo y haga clic en el tipo de elemento de trabajo que quiere crear.
Use estas tareas para administrar los errores de validación de la ventana Lista de errores:
To | Siga estos pasos: |
---|---|
Suprimir los errores seleccionados durante la validación | Haga clic con el botón derecho en uno o varios errores seleccionados, elija Administrar errores de validación y, después, haga clic en Suprimir errores. Los errores suprimidos aparecen tachados. La próxima vez que ejecute la validación, estos errores no aparecerán. El seguimiento de los errores suprimidos se lleva a cabo en un archivo .suppressions relacionado con el archivo de diagrama de dependencia correspondiente. |
Detener la supresión de los errores seleccionados | Haga clic con el botón derecho en el error o errores suprimidos seleccionados, elija Administrar errores de validación y, después, haga clic en Detener supresión de errores. La próxima vez que ejecute la validación, los errores suprimidos aparecerán. |
Restauración de todos los errores suprimidos en la ventana Lista de errores | Haga clic con el botón derecho en cualquier parte en la ventana Lista de errores, elija Administrar errores de validación y, después, haga clic en Show All Suppressed Errors (Mostrar todos los errores suprimidos). |
Ocultación de todos los errores suprimidos en la ventana Lista de errores | Haga clic con el botón derecho en cualquier parte en la ventana Lista de errores, elija Administrar errores de validación y, después, haga clic en Hide All Suppressed Errors (Ocultar todos los errores suprimidos). |
Validar código automáticamente
Puede realizar la validación de capas cada vez que ejecute una compilación local. Si el equipo usa Azure DevOps, podrá realizar la validación de capas con inserciones en el repositorio validadas, que se pueden especificar creando una tarea MSBuild personalizada, y usar informes de compilación para recopilar los errores de validación. Para crear compilaciones de inserción en el repositorio validada, consulte Inserción en el repositorio validada de TFVC.
Para validar código automáticamente durante una compilación local
Use un editor de texto para abrir el archivo del proyecto de modelado (.modelproj) y, a continuación, incluya la siguiente propiedad:
<ValidateArchitecture>true</ValidateArchitecture>
O bien
En el Explorador de soluciones, haga clic con el botón derecho en el proyecto de modelado que contiene el diagrama o diagramas de dependencia y, después, haga clic en Propiedades.
En la ventana Propiedades, establezca la propiedad Validar arquitectura del proyecto de modelado en True.
Esto incluye el proyecto de modelado en el proceso de validación.
En el Explorador de soluciones, haga clic en el archivo de diagrama de dependencia (.layerdiagram) que quiere usar para la validación.
En la ventana Propiedades, asegúrese de que la propiedad Acción de compilación del diagrama está establecida en Validar.
Esto incluye el diagrama de dependencia en el proceso de validación.
Para administrar los errores en la ventana Lista de errores, consulte Resolución de errores de validación de capas.
Solucionar problemas de validación de capas
En la siguiente tabla se describen problemas de validación de capas y su resolución. Estos problemas difieren de los errores que son resultado de conflictos entre el código y el diseño. Para obtener más información sobre estos errores, consulte Solución de problemas de validación de capas.
Problema | Causa posible | Resolución |
---|---|---|
Los errores de validación no se producen como se espera. | La validación no funciona en los diagramas de dependencia que se copian de otros diagramas de dependencia en el Explorador de soluciones y que están en el mismo proyecto de modelado. Los diagramas de dependencia que se copian de esta manera contienen las mismas referencias que el diagrama de dependencia original. | Agregue un nuevo diagrama de dependencia al proyecto de modelado. Copie los elementos del diagrama de dependencia de origen en el nuevo diagrama. |
Resolución de errores de validación de capas
Cuando se valida el código con un diagrama de dependencia, se producen errores de validación si el código entra en conflicto con el diseño. Por ejemplo, las siguientes condiciones podrían producir errores de validación:
Un artefacto se ha asignado a la capa equivocada. En este caso, mueva el artefacto.
Un artefacto, como por ejemplo una clase, usa otra clase de forma que hay conflictos con su arquitectura. En este caso, tiene que refactorizar el código para quitar la dependencia.
Para resolver estos errores, actualice el código hasta no aparezcan más errores durante la validación. Puede realizar esta tarea repetitivamente.
En la sección siguiente se describe la sintaxis que se usa en estos errores, se explica el significado de los mismos y se sugiere qué se puede hacer para resolverlos o administrarlos.
Sintaxis | Descripción |
---|---|
ArtifactN(ArtifactTypeN) | ArtifactN es un artefacto que está asociado a una capa del diagrama de dependencia. ArtifactTypeN es el tipo de ArtifactN, como una Clase o un Método, por ejemplo: MiSolución.MiProyecto.MiClase.MiMétodo(Método) |
NamespaceNameN | Nombre de un espacio de nombres. |
LayerNameN | Nombre de una capa del diagrama de dependencia. |
DependencyType | Tipo de relación de dependencia entre Artifact1 y Artifact2. Por ejemplo, Artifact1 tiene una relación Llama a con Artifact2. |
Sintaxis del error | Descripción del error |
---|---|
DV0001: Dependencia no válida | Este problema se notifica cuando un elemento de código (espacio de nombres, tipo o miembro) asignado a una capa hace referencia a un elemento de código asignado a otra capa, pero no hay ninguna flecha de dependencia entre estas capas en el diagrama de validación de dependencias que contiene estas capas. Se trata de una infracción de la restricción de dependencia. |
DV1001: Nombre de espacio de nombres no válido | Este problema se notifica en un elemento de código asociado a una capa cuya propiedad "Allowed Namespace Names" (Nombres de espacio de nombres permitidos) no contiene el espacio de nombres en el que se define este elemento de código. Se trata de una infracción de la restricción de nomenclatura. Tenga en cuenta que la sintaxis de la propiedad "Allowed Namespace Names" es una lista de espacios de nombres separados por punto y coma en los que está permitido definir los elementos de código asociados a una capa. |
DV1002: Dependencia de un espacio de nombres al que no se puede hacer referencia | Este problema se notifica en un elemento de código asociado a una capa que hace referencia a otro elemento de código definido en un espacio de nombres que, a su vez, está definido en la propiedad "Espacios de nombres a los que no se puede hacer referencia" de la capa. Se trata de una infracción de la restricción de nomenclatura. Tenga en cuenta que la propiedad "Espacios de nombres a los que no se puede hacer referencia" se define como una lista de espacios de nombres separados por punto y coma a los que no se debe hacer referencia en los elementos de código asociados a esta capa. |
DV1003: Nombre de espacio de nombres no permitido | Este problema se notifica en un elemento de código asociado a una capa cuya propiedad "Disallowed Namespace Names" (Nombres de espacio de nombres no permitidos) contiene el espacio de nombres en el que se define este elemento de código. Se trata de una infracción de la restricción de nomenclatura. Tenga en cuenta que la propiedad "Disallowed Namespace Names" se define como una lista de espacios de nombres separados por punto y coma donde los elementos de código asociados con esta capa no se deben definir. |
DV2001: Presencia de diagrama de capas | Este problema se notifica en un proyecto que no incluye un archivo de diagrama de dependencia, pero que hace referencia a los analizadores de validación de dependencias. Si no se ha usado la validación de dependencias, puede quitar "Microsoft.DependencyValidation.Analyzers" directamente en el Explorador de soluciones o suprimir esta advertencia. Para agregar un diagrama de dependencia, consulte Creación de diagramas de dependencia desde el código. |
DV2002: Base de tipos no asignados | Este problema se notifica cuando un elemento de código no está asignado a ninguna capa. |
DV3001: Falta un vínculo | La capa "LayerName" está vinculada a "Artifact", que no se encuentra. ¿Falta una referencia de ensamblado? |
DV9001: El análisis de arquitectura encontró errores internos | Puede que los resultados no estén completos. Vea el registro detallado de eventos de compilación o la ventana de salida para obtener más información. |
Contenido relacionado
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente las Cuestiones de GitHub como mecanismo de retroalimentación para el contenido y lo sustituiremos por un nuevo sistema de retroalimentación. Para más información, consulta:Enviar y ver comentarios de