Valider du code avec des diagrammes de dépendance

Pourquoi utiliser des diagrammes de dépendance ?

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

  • Rechercher des conflits entre des dépendances dans votre code et des dépendances sur le diagramme de dépendance.

  • Rechercher des dépendances qui peuvent être affectées par les modifications proposées.

    Par exemple, vous pouvez modifier le diagramme de dépendance pour afficher les modifications apportées à l'architecture potentielle, puis valider le code afin de consulter les dépendances concernées.

  • Refactoriser ou migrer le code vers une conception différente.

    Recherchez le code ou les dépendances qui requièrent du travail lorsque vous déplacez le code vers une architecture différente.

Configuration requise

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

  • Une solution qui inclut un projet de modélisation avec un diagramme de dépendance. Ce diagramme de dépendance doit être lié aux artefacts dans les projets Visual C# ou Visual Basic que vous souhaitez valider. Voir Créer des diagrammes de dépendance à partir de votre code.

Pour connaître les éditions de Visual Studio qui prennent en charge cette fonctionnalité, consultez Prise en charge de l’édition pour et les outils d’architecture et de modélisation.

Vous pouvez valider manuellement le code depuis un diagramme de dépendance ouvert dans Visual Studio ou depuis une invite de commandes. Vous pouvez également valider le code automatiquement en exécutant des builds locales ou des builds Azure Pipelines.

Important

Si vous souhaitez effectuer la validation de couche à l'aide de Team Foundation Build (TFS), vous devez aussi installer la même version de Visual Studio sur votre serveur de builds.

Validation de dépendances dynamique

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 en direct 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 dynamiques, 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 ne souhaitez pas 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 il s’agit de la version la plus élevée utilisée.

  • L’ajout d’un nouveau projet de validation des dépendances déclenche une mise à jour du 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 de projets partagés entre plusieurs applications, mais le processus de validation ne les inclura pas. Aucune erreur de validation n’apparaîtra pour des références à des projets ou à des assemblys qui sont liés à des couches distinctes, lorsqu’aucune dépendance n’apparaît entre ces couches. De telles références ne sont pas considérées comme des dépendances à moins que le code utilise ces références.

  1. Sur le diagramme de dépendance, 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, recherchez la colonne Prend en charge la validation. Si la valeur faux lui est affectée, l'élément ne peut pas être validé.

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

Lorsque vous faites glisser des éléments vers le diagramme de couche, les références aux assemblys .NET ou aux projets 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 aux projets analysés pendant la validation. Vous pouvez également inclure d'autres assemblys .NET et des projets pour qu'ils soient validés sans les faire glisser manuellement vers le diagramme de dépendance.

  1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet de modélisation ou sur 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 manuellement le code

Si vous un diagramme de dépendance ouvert est lié aux éléments de solution, exécutez la commande de raccourci Valider 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, exécutez la validation de couche régulièrement afin de pouvoir intercepter tôt les conflits de dépendance.

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

  1. Cliquez avec le bouton droit sur la surface de diagramme, puis cliquez sur Valider l’architecture.

    Notes

    Par défaut, la propriété Action de génération sur le fichier de diagramme de couche (.layerdiagram) a la valeur Valider 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 des 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.

    Notes

    Visual Studio peut afficher une carte de code à la place 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épendance ou lorsqu'une dépendance spécifiée par le diagramme de dépendance manque dans le code. Examinez la carte de code ou le code pour déterminer si la dépendance doit exister. Pour plus d’informations sur les cartes de code, consultez Mapper les dépendances parmi 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 l’un des éléments suivants :

    • 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 ci-dessous.

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

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

        msbuild /p:ValidateArchitecture=true
        
    • Pour valider le code par rapport à tous les projets de modélisation dans 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 contenant un diagramme de dépendance, puis exécutez MSBuild avec la propriété personnalisée suivante :

        msbuild /p:ValidateArchitecture=true
        

      Toutes les erreurs qui ont lieu seront répertoriées. Pour plus d’informations sur MSBuild, consultez MSBuild et Tâche MSBuild.

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

Gérer les erreurs de validation

Pendant le processus de développement, vous pouvez supprimer certains conflits signalés pendant la validation. Par exemple, vous pouvez supprimer des erreurs que vous êtes déjà en train de traiter qui ne sont pas pertinentes dans le cadre de votre scénario spécifique. Lorsque vous supprimez une erreur, il est conseillé d’entrer un élément de travail dans Team Foundation.

Avertissement

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

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 voulez créer.

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

To Procédez comme suit
Supprimer des erreurs sélectionnées pendant la validation Cliquez avec le bouton droit sur 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 apparaissent barrées. Lors de la prochaine validation, ces erreurs ne s’afficheront pas.

Les erreurs supprimées sont suivies dans un fichier .suppressions pour le fichier de diagramme de dépendance correspondant.
Cesser de supprimer des erreurs sélectionnées Cliquez avec le bouton droit sur la 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 qui sont sélectionnées s'afficheront lors de la prochaine validation.
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 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 les erreurs supprimées.

Valider automatiquement le code

Exécutez la validation de couche chaque fois que vous exécutez une build locale. Si votre équipe utilise Azure DevOps, vous pouvez exécuter la validation de couche avec les archivages contrôlés que vous spécifiez en créant une tâche personnalisée MSBuild, puis utilisez les rapports de build pour collecter les erreurs de validation. Pour créer des builds d’archivage contrôlé, consultez Archivage contrôlé TFVC.

Pour valider automatiquement le code au cours d'une build locale

Utilisez un éditeur de texte pour ouvrir le fichier projet de modélisation (.modelproj), puis y inclure 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 ou les diagrammes de couche, puis cliquez sur Propriétés.

  2. Dans la fenêtre Propriétés, affectez à la propriété Valider l’architecture du projet de modélisation la valeur True.

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

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

  4. Dans la fenêtrePropriétés, assurez-vous que la propriété Action de génération du diagramme a la valeur Valider.

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

Pour gérer les erreurs de validation dans la fenêtre de liste des 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 liés à la validation de couche et propose une résolution. Ces problèmes ne sont pas liés aux erreurs qui résultent de conflits entre le code et la conception. Pour plus d’informations sur ces erreurs, consultez Résoudre des 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 avec les diagrammes de dépendance copiés à partir d'autres diagrammes de dépendance dans l'Explorateur de solutions, et ceux se trouvant dans le même projet de modélisation. Les diagrammes de dépendance copiés de cette façon contiennent les mêmes références que le diagramme de dépendance d'origine. Ajoutez un nouveau diagramme de dépendance au projet de modélisation.

Copiez les éléments depuis le diagramme de dépendance source vers le nouveau diagramme.

Résoudre des erreurs de validation de couche

Lorsque vous validez du code par rapport à un diagramme de dépendance, des erreurs de validation se produisent si le code est en conflit avec la conception. Par exemple, les conditions suivantes peuvent provoquer des erreurs de validation :

  • Un artefact est assigné à une couche inappropriée. Dans ce cas, déplacez l’artefact.

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

Pour résoudre ces erreurs, mettez à jour le code de façon à ce que la validation ne génère plus d’erreur. Vous pouvez effectuer cette tâche de façon itérative.

La section suivante décrit la syntaxe utilisée lors de ces erreurs, explique la signification de ces erreurs, et suggère des opérations pour les résoudre ou les gérer.

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

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 Le nom d'une couche sur le diagramme de dépendance.
DependencyType Le type de relation de dépendance entre Artifact1 et Artifact2. Par exemple, Artifact1 a une relation Appels avec Artifact2.
Syntaxe de l'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 qu’il n’existe aucune flèche de dépendance entre ces couches dans le diagramme de validation des dépendances contenant ces couches. Il s’agit d’une violation de contrainte de dépendance.
DV1001 : Nom de l'espace de noms non valide Ce problème est signalé sur un élément de code associé à une couche dont la propriété « Noms d’espaces de noms autorisés » ne contient pas l’espace de noms dans lequel cet élément de code est défini. Il s’agit d’une violation de contrainte de nommage. Notez que la syntaxe de « Noms d’espaces de noms autorisés » doit être une liste de point-virgule d’espaces de noms dans laquelle les éléments de code associés à la couche sont autorisés à être définis.
DV1002 : Dépendance avec un espace de noms ne pouvant pas être référencé Ce problème est signalé sur un élément de code associé à une couche et référençant un autre élément de code défini dans un espace de noms qui est défini dans la propriété « Espace de noms non référencé » de la couche. Il s’agit d’une violation de contrainte de nommage. Notez que la propriété « Espaces de noms ne pouvant pas être référencés » 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 dont la propriété « Noms d’espaces de noms autorisés » ne contient pas l’espace de noms dans lequel cet élément de code est défini. Il s’agit d’une violation de contrainte de nommage. 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 lesquels 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 qui fait référence aux analyseurs de validation des dépendances. Si la validation des dépendances n’a pas été utilisée, vous pouvez supprimer « Microsoft.DependencyValidation.Analyzers  » directement de Explorateur de solutions ou supprimer cet avertissement. Pour ajouter un diagramme de dépendances, consultez Créer des diagrammes de dépendance à partir de votre code.
DV2002 : Base de types non mappés Ce problème est signalé lorsqu’un élément de code n’est mappé à aucune couche.
DV3001 : Lien manquant La couche « LayerName » est lié à « Artifact » qui est introuvable. Vérifiez qu'il ne manque aucune référence d'assembly.
DV9001 : Erreurs internes détectées lors de l'analyse de l'architecture Il est possible que les résultats ne soient pas complets. Pour plus d'informations, consultez le journal des événements de build ou la fenêtre Sortie.