Partager via


Valider le code avec des diagrammes de dépendances

Pourquoi utiliser des diagrammes de dépendances ?

Pour vous assurer que le code n’est pas en conflit avec sa conception, validez votre code avec des diagrammes de dépendances dans Visual Studio. Cela peut vous aider à :

  • Recherchez des conflits entre les dépendances dans votre code et les dépendances sur le diagramme des dépendances.

  • Recherchez les dépendances susceptibles d’être affectées par les modifications proposées.

    Par exemple, vous pouvez modifier le diagramme de dépendances pour afficher les modifications d’architecture potentielles, puis valider le code pour voir les dépendances affectées.

  • Refactorisez ou migrez du code vers une autre conception.

    Recherchez du code ou des dépendances qui nécessitent un travail lorsque vous déplacez le code vers une architecture différente.

Exigences

  • Visual Studio

    Pour créer un diagramme de dépendances pour un projet .NET Core, vous devez disposer de Visual Studio 2019 version 16.2 ou ultérieure.

  • Solution qui a un projet de modélisation avec un diagramme de dépendances. Ce diagramme de dépendances doit être lié à des artefacts dans des projets C# ou Visual Basic que vous souhaitez valider. Consultez Créer des diagrammes de dépendances à partir de votre code.

Pour voir quelles éditions de Visual Studio prennent en charge cette fonctionnalité, consultez la prise en charge de l’édition pour les outils d’architecture et de modélisation.

Vous pouvez valider le code manuellement à partir d’un diagramme de dépendances ouvert dans Visual Studio ou à partir d’une invite de commandes. Vous pouvez également valider le code automatiquement lors de l’exécution de builds locales ou de builds Azure Pipelines.

Important

Si vous souhaitez exécuter la validation de couche à l’aide de Team Foundation Server (TFS), vous devez également installer la même version de Visual Studio sur votre serveur de build.

Validation des dépendances dynamiques

La validation des dépendances se produit en temps réel et les erreurs sont affichées immédiatement dans la liste d’erreurs.

  • La validation dynamique est prise en charge pour C# et Visual Basic.

  • Pour activer l’analyse complète de la solution lors de l’utilisation de la validation des dépendances actives, ouvrez les paramètres d’options à partir de la barre d’or qui apparaît dans la liste d’erreurs.

    • Vous pouvez ignorer définitivement la barre d’or si vous n’êtes pas intéressé par voir tous les problèmes architecturaux dans votre solution.
    • Si vous n’activez pas l’analyse complète de la solution, l’analyse est effectuée uniquement pour les fichiers en cours de modification.
  • Lors de la mise à niveau de projets pour activer la validation dynamique, une boîte de dialogue affiche la progression de la conversion.

  • Lors de la mise à jour d’un projet pour la validation des dépendances actives, la version du package NuGet est mise à niveau pour être la même pour tous les projets et est la version la plus élevée utilisée.

  • L’ajout d’un nouveau projet de validation de dépendance déclenche une mise à jour de projet.

Voir si un élément prend en charge la validation

Vous pouvez lier des couches à des sites web, des documents Office, des fichiers texte brut et des fichiers dans des projets partagés entre plusieurs applications, mais le processus de validation ne les inclut pas. Les erreurs de validation n’apparaissent pas pour les références aux projets ou aux assemblys liés à des couches distinctes lorsqu’aucune dépendance n’apparaît entre ces couches. Ces références ne sont pas considérées comme des dépendances, sauf si le code utilise ces références.

  1. Dans le diagramme de dépendances, sélectionnez une ou plusieurs couches, cliquez avec le bouton droit sur votre sélection, puis cliquez sur Afficher les liens.

  2. Dans l’Explorateur de couches, examinez la colonne Supports Validation . Si la valeur est false, l’élément ne prend pas en charge la validation.

Inclure d’autres assemblys et projets .NET pour la validation

Lorsque vous faites glisser des éléments vers le diagramme de dépendances, les références aux assemblys ou projets .NET correspondants sont ajoutées automatiquement au dossier Références de couche dans le projet de modélisation. Ce dossier contient des références aux assemblys et projets analysés lors de la validation. Vous pouvez inclure d’autres assemblys et projets .NET pour la validation sans les faire glisser manuellement vers le diagramme de dépendances.

  1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet de modélisation ou le dossier Références de couche , puis cliquez sur Ajouter une référence.

  2. Dans la boîte de dialogue Ajouter une référence , sélectionnez les assemblys ou les projets, puis cliquez sur OK.

Valider le code manuellement

Si vous disposez d’un diagramme de dépendance ouvert lié à des éléments de solution, vous pouvez exécuter la commande Valider le raccourci à partir du diagramme. Vous pouvez également utiliser l’invite de commandes pour exécuter la commande msbuild avec la propriété personnalisée /p :ValidateArchitecture définie sur True. Par exemple, lorsque vous apportez des modifications dans le code, effectuez régulièrement une validation de couche afin de pouvoir intercepter les conflits de dépendances au début.

Valider le code à partir d’un diagramme de dépendances ouvert

  1. Cliquez avec le bouton droit sur l’aire du diagramme, puis cliquez sur Valider l’architecture.

    Note

    Par défaut, la propriété Action de génération sur le fichier de diagramme de dépendances (.layerdiagram) est définie sur Validate afin que le diagramme soit inclus dans le processus de validation.

    La fenêtre Liste d’erreurs signale toutes les erreurs qui se produisent. Pour plus d’informations sur les erreurs de validation, consultez Résoudre les problèmes de validation de couche.

  2. Pour afficher la source de chaque erreur, double-cliquez sur l’erreur dans la fenêtre Liste d’erreurs .

    Note

    Visual Studio peut afficher un mappage de code au lieu de la source de l’erreur. Cela se produit lorsque le code a une dépendance sur un assembly qui n’est pas spécifié par le diagramme de dépendances, ou si le code manque une dépendance spécifiée par le diagramme de dépendances. Passez en revue le mappage de code ou le code pour déterminer si la dépendance doit exister. Pour plus d’informations sur les mappages de code, consultez Mapper les dépendances entre vos solutions.

  3. Pour gérer les erreurs, consultez Résoudre les erreurs de validation de couche.

Valider le code à l’invite de commandes

  1. Ouvrez l’invite de commandes Visual Studio.

  2. Choisissez une des options suivantes :

    • Pour valider le code par rapport à un projet de modélisation spécifique dans la solution, exécutez MSBuild avec la propriété personnalisée suivante.

      msbuild <FilePath+ModelProjectFileName>.modelproj /p:ValidateArchitecture=true
      

      - ou -

      Accédez au dossier qui contient le fichier de projet de modélisation (.modelproj) et le diagramme de dépendances, puis exécutez MSBuild avec la propriété personnalisée suivante :

      msbuild /p:ValidateArchitecture=true
      
    • Pour valider le code sur tous les projets de modélisation de la solution, exécutez MSBuild avec la propriété personnalisée suivante :

      msbuild <FilePath+SolutionName>.sln /p:ValidateArchitecture=true
      

      - ou -

      Accédez au dossier de solution, qui doit contenir un projet de modélisation qui contient un diagramme de dépendances, puis exécutez MSBuild avec la propriété personnalisée suivante :

      msbuild /p:ValidateArchitecture=true
      

      Toutes les erreurs qui se produisent sont répertoriées. Pour plus d’informations sur MSBuild, consultez MSBuild et MSBuild Task.

    Pour plus d’informations sur les erreurs de validation, consultez Résoudre les problèmes de validation de couche.

Gérer les erreurs de validation

Pendant le processus de développement, vous pouvez supprimer certains des conflits signalés lors de la validation. Par exemple, vous pouvez supprimer les erreurs que vous traitez déjà ou qui ne sont pas pertinentes pour votre scénario particulier. Lorsque vous supprimez une erreur, il est recommandé de consigner un élément de travail dans Team Foundation.

Avertissement

Vous devez déjà être connecté au contrôle de code source TFS (SCC) pour créer ou lier à un élément de travail. Si vous essayez d’ouvrir une connexion à un autre SCC TFS, Visual Studio ferme automatiquement la solution actuelle. Vérifiez que vous êtes déjà connecté au SCC approprié avant de tenter de créer ou de lier à un élément de travail. Dans les versions ultérieures de Visual Studio, les commandes de menu ne sont pas disponibles si vous n’êtes pas connecté à un SCC.

Créer un élément de travail pour une erreur de validation

  • Dans la fenêtre Liste d’erreurs , cliquez avec le bouton droit sur l’erreur, pointez sur Créer un élément de travail, puis cliquez sur le type d’élément de travail que vous souhaitez créer.

Utilisez ces tâches pour gérer les erreurs de validation dans la fenêtre Liste d’erreurs :

À Suivez ces étapes
Supprimer les erreurs sélectionnées lors de la validation Cliquez avec le bouton droit sur l’une ou plusieurs erreurs sélectionnées, pointez sur Gérer les erreurs de validation, puis cliquez sur Supprimer les erreurs.

Les erreurs supprimées s’affichent avec une mise en forme en texte barré. Lorsque vous exécutez la validation la prochaine fois, ces erreurs ne s’affichent pas.

Les erreurs supprimées sont suivies dans un fichier .suppressions pour le fichier de diagramme de dépendances correspondant.
Arrêter la suppression des erreurs sélectionnées Cliquez avec le bouton droit sur l’erreur ou les erreurs supprimées sélectionnées, pointez sur Gérer les erreurs de validation, puis cliquez sur Arrêter la suppression des erreurs.

Les erreurs supprimées sélectionnées s’affichent lorsque vous exécutez la validation la prochaine fois.
Restaurer toutes les erreurs supprimées dans la fenêtre Liste d’erreurs Cliquez avec le bouton droit n’importe où dans la fenêtre Liste d’erreurs , pointez sur Gérer les erreurs de validation, puis cliquez sur Afficher toutes les erreurs supprimées.
Masquer toutes les erreurs supprimées de la fenêtre Liste d’erreurs Cliquez avec le bouton droit n’importe où dans la fenêtre Liste d’erreurs , pointez sur Gérer les erreurs de validation, puis cliquez sur Masquer toutes les erreurs supprimées.

Valider le code automatiquement

Vous pouvez effectuer une validation de couche chaque fois que vous exécutez une build locale. Si votre équipe utilise Azure DevOps, vous pouvez effectuer une validation de couche avec des vérifications contrôlées, que vous pouvez spécifier en créant une tâche MSBuild personnalisée et en utilisant des rapports de génération pour collecter des erreurs de validation. Pour créer des builds de validation contrôlée, consultez la validation contrôlée TFVC.

Pour valider automatiquement le code pendant une build locale

Utilisez un éditeur de texte pour ouvrir le fichier de projet de modélisation (.modelproj), puis incluez la propriété suivante :

<ValidateArchitecture>true</ValidateArchitecture>

- ou -

  1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet de modélisation qui contient le diagramme de dépendance ou les diagrammes, puis cliquez sur Propriétés.

  2. Dans la fenêtre Propriétés , définissez la propriété Validate Architecture du projet de modélisation sur True.

    Cela inclut le projet de modélisation dans le processus de validation.

  3. Dans l’Explorateur de solutions, cliquez sur le fichier de diagramme de dépendances (.layerdiagram) que vous souhaitez utiliser pour la validation.

  4. Dans la fenêtre Propriétés , vérifiez que la propriété Action de génération du diagramme est définie sur Validate.

    Cela inclut le diagramme de dépendances dans le processus de validation.

Pour gérer les erreurs dans la fenêtre Liste d’erreurs, consultez Résoudre les erreurs de validation de couche.

Résoudre les problèmes de validation de couche

Le tableau suivant décrit les problèmes de validation de couche et leur résolution. Ces problèmes diffèrent des erreurs résultant de conflits entre le code et la conception. Pour plus d’informations sur ces erreurs, consultez Résoudre les problèmes de validation de couche.

Problème Cause possible Résolution
Les erreurs de validation ne se produisent pas comme prévu. La validation ne fonctionne pas sur les diagrammes de dépendances copiés à partir d’autres diagrammes de dépendances dans l’Explorateur de solutions et qui se trouvent dans le même projet de modélisation. les diagrammes de dépendances copiés de cette façon contiennent les mêmes références que le diagramme de dépendances d’origine. Ajoutez un nouveau diagramme de dépendances au projet de modélisation.

Copiez les éléments du diagramme de dépendances source dans le nouveau diagramme.

Résoudre les erreurs de validation de couche

Lorsque vous validez le code par rapport à un diagramme de dépendances, des erreurs de validation se produisent lorsque le code est en conflit avec la conception. Par exemple, les conditions suivantes peuvent entraîner des erreurs de validation :

  • Un artefact est affecté à la couche incorrecte. Dans ce cas, déplacez l’artefact.

  • Un artefact, tel qu’une classe, utilise une autre classe d’une manière qui est en conflit avec votre architecture. Dans ce cas, refactorisez le code pour supprimer la dépendance.

Pour résoudre ces erreurs, mettez à jour le code jusqu’à ce qu’aucune autre erreur ne s’affiche lors de la validation. Vous pouvez effectuer cette tâche de manière itérative.

La section suivante décrit la syntaxe utilisée dans ces erreurs, explique la signification de ces erreurs et suggère ce que vous pouvez faire pour les résoudre ou les gérer.

Syntaxe Description
ArtifactN(ArtifactTypeN) ArtifactN est un artefact associé à une couche sur le diagramme de dépendances.

ArtifactTypeN est le type d’ArtifactN, tel qu’une classe ou une méthode, par exemple :

MySolution.MyProject.MyClass.MyMethod(Method)
NamespaceNameN Nom d’un espace de noms.
LayerNameN Nom d’une couche sur le diagramme de dépendances.
DependencyType Type de relation de dépendance entre Artifact1 et Artifact2. Par exemple, Artifact1 a une relation Appels avec Artifact2.
Syntaxe d’erreur Description de l’erreur
DV0001 : Dépendance non valide Ce problème est signalé lorsqu’un élément de code (espace de noms, type, membre) mappé à une couche fait référence à un élément de code mappé à une autre couche, mais il n’existe aucune flèche de dépendance entre ces couches dans le diagramme de validation de dépendance contenant ces couches. Il s’agit d’une violation de contrainte de dépendance.
DV1001 : Nom d’espace de noms non valide Ce problème est signalé sur un élément de code associé à une couche qui ne contient pas l’espace de noms autorisé dans lequel cet élément de code est défini. Il s’agit d’une violation de contrainte d’affectation de noms. Notez que la syntaxe de « Noms d'espaces de noms autorisés » doit être une liste séparée par des points-virgules d'espaces de noms dans laquelle les éléments de code associés à une couche sont autorisés à être définis.
DV1002 : Dépendance sur un espace de noms non référencé Ce problème est signalé sur un élément de code associé à une couche et faisant référence à un autre élément de code défini dans un espace de noms défini dans la propriété « Unreferenceable Namespace » de la couche. Il s’agit d’une violation de contrainte d’affectation de noms. Notez que la propriété « Unreferenceable Namespaces » est définie comme une liste séparée par des points-virgules d’espaces de noms qui ne doivent pas être référencés dans les éléments de code associés à cette couche.
DV1003 : Nom de l’espace de noms non autorisé Ce problème est signalé sur un élément de code associé à une couche dans laquelle la propriété « Noms d’espaces de noms non autorisés » contient l’espace de noms dans lequel cet élément de code est défini. Il s’agit d’une violation de contrainte d’affectation de noms. Notez que la propriété « Nom de l’espace de noms non autorisé » est définie comme une liste séparée par des points-virgules d’espaces de noms dans laquelle les éléments de code associés à cette couche ne doivent pas être définis.
DV2001 : Présence du diagramme de couche Ce problème est signalé sur un projet qui n’inclut pas de fichier de diagramme de dépendances, mais fait référence aux analyseurs de validation des dépendances. Si la validation de dépendance n’a pas été utilisée, vous pouvez supprimer « Microsoft.DependencyValidation.Analyzers » directement à partir de l’Explorateur de solutions ou supprimer cet avertissement. Pour ajouter un diagramme de dépendances, consultez Créer des diagrammes de dépendances à partir de votre code.
DV2002 : Base des types non mappés Ce problème est signalé lorsqu’un élément de code n’est mappé à aucune couche.
DV3001 : Lien manquant Le calque « LayerName » contient un lien vers « Artifact » qui n'est pas trouvé. Il vous manque une référence d’assemblage ?
DV9001 : l’analyse architecturale a détecté des erreurs internes Les résultats peuvent ne pas être terminés. Pour plus d'informations, consultez le journal détaillé des événements de génération ou la fenêtre de sortie.