Convalidare il codice con i diagrammi delle dipendenze

Perché usare diagrammi di dipendenza?

Per assicurarsi che il codice non sia in conflitto con la progettazione, convalidare il codice con diagrammi di dipendenza in Visual Studio. In questo modo è possibile effettuare le operazioni seguenti:

  • Trovare conflitti tra le dipendenze nel codice e le dipendenze nel diagramma delle dipendenze.

  • Trovare le dipendenze sulle quali potrebbero influire le modifiche proposte.

    Ad esempio, è possibile modificare il diagramma delle dipendenze per visualizzare le potenziali modifiche dell'architettura e quindi convalidare il codice per visualizzare le dipendenze interessate.

  • Effettuare il refactoring o la migrazione del codice in una progettazione diversa.

    Trovare codice o dipendenze che richiedono azioni quando si sposta il codice in un'architettura diversa.

Requisiti

  • Visual Studio

    Per creare un diagramma delle dipendenze per un progetto .NET Core, è necessario avere Visual Studio 2019 versione 16.2 o successiva.

  • Soluzione con un progetto di modellazione con un diagramma delle dipendenze. Questo diagramma delle dipendenze deve essere collegato agli artefatti nei progetti C# o Visual Basic da convalidare. Vedere Creare diagrammi di dipendenza dal codice.

Per vedere quali edizioni di Visual Studio supportano questa funzionalità, vedere Supporto dell'edizione per gli strumenti di architettura e modellazione.

È possibile convalidare manualmente il codice da un diagramma delle dipendenze aperto in Visual Studio o da un prompt dei comandi. È anche possibile convalidare automaticamente il codice durante l'esecuzione di compilazioni locali o compilazioni di Azure Pipelines.

Importante

Se si vuole eseguire la convalida del livello usando Team Foundation Server (TFS), è necessario installare anche la stessa versione di Visual Studio nel server di compilazione.

Convalida delle dipendenze in tempo reale

La convalida delle dipendenze viene eseguita in tempo reale e gli errori vengono visualizzati immediatamente nell'elenco errori.

  • La convalida in tempo reale è supportata per C# e Visual Basic.

  • Per abilitare l'analisi completa della soluzione quando si usa la convalida delle dipendenze in tempo reale, aprire le impostazioni delle opzioni dalla barra oro visualizzata nell'elenco errori.

    • Se non si è interessati a visualizzare tutti i problemi di architettura nella soluzione, è possibile ignorare definitivamente la barra d'oro.
    • Se non si abilita l'analisi completa della soluzione, l'analisi viene eseguita solo per i file da modificare.
  • Quando si aggiornano i progetti per abilitare la convalida in tempo reale, una finestra di dialogo mostra lo stato di avanzamento della conversione.

  • Quando si aggiorna un progetto per la convalida delle dipendenze in tempo reale, la versione del pacchetto NuGet viene aggiornata in modo che sia la stessa per tutti i progetti ed è la versione più recente in uso.

  • L'aggiunta di un nuovo progetto di convalida delle dipendenze attiva un aggiornamento del progetto.

Vedere se un elemento supporta la convalida

È possibile collegare livelli a siti Web, documenti di Office, file di testo normale e file in progetti condivisi tra più app, ma il processo di convalida non li includerà. Gli errori di convalida non verranno visualizzati per i riferimenti a progetti oppure a assembly collegati a livelli separati quando tra tali livelli non è presente alcuna dipendenza. Tali riferimenti non vengono considerati dipendenze a meno che il codice non li usi.

  1. Nel diagramma delle dipendenze selezionare uno o più livelli, fare clic con il pulsante destro del mouse sulla selezione e quindi scegliere Visualizza collegamenti.

  2. In Esplora layer esaminare la colonna Supporta convalida . Se il valore è false, l'elemento non supporta la convalida.

Includere altri progetti e assembly .NET per la convalida

Quando si trascinano gli elementi nel diagramma delle dipendenze, i riferimenti agli assembly o ai progetti .NET corrispondenti vengono aggiunti automaticamente alla cartella Riferimenti livello nel progetto di modellazione. Questa cartella contiene i riferimenti agli assembly e ai progetti analizzati durante la convalida. È possibile includere altri assembly e progetti .NET per la convalida senza trascinarli manualmente nel diagramma delle dipendenze.

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto di modellazione o sulla cartella Riferimenti livello, quindi scegliere Aggiungi riferimento.

  2. Nella finestra di dialogo Aggiungi riferimento selezionare gli assembly o i progetti e quindi fare clic su OK.

Convalidare manualmente il codice

Se si dispone di un diagramma delle dipendenze aperto collegato agli elementi della soluzione, è possibile eseguire il comando convalida collegamento dal diagramma. È anche possibile usare il prompt dei comandi per eseguire il comando msbuild con la proprietà personalizzata /p:ValidateArchitecture impostata su True. Ad esempio, analogamente alle modifiche nel codice, eseguire regolarmente la convalida dei livelli in modo da rilevare tempestivamente conflitti di dipendenza.

Convalidare il codice da un diagramma delle dipendenze aperto

  1. Fare clic con il pulsante destro del mouse sull'area del diagramma e quindi scegliere Convalida architettura.

    Nota

    Per impostazione predefinita, la proprietà Azione di compilazione nel file del diagramma delle dipendenze (con estensione layerdiagram) è impostata su Validate in modo che il diagramma sia incluso nel processo di convalida.

    La finestra Elenco errori segnala eventuali errori che si verificano. Per altre informazioni sugli errori di convalida, vedere Risolvere i problemi di convalida del livello.

  2. Per visualizzare l'origine di ogni errore, fare doppio clic sull'errore nella finestra Elenco errori.

    Nota

    Visual Studio potrebbe visualizzare una mappa del codice anziché l'origine dell'errore. Ciò si verifica quando il codice ha una dipendenza da un assembly non specificato dal diagramma delle dipendenze oppure il codice manca una dipendenza specificata dal diagramma delle dipendenze. Esaminare la mappa del codice o il codice per determinare se la dipendenza deve esistere. Per altre informazioni sulle mappe codici, vedere Mappare le dipendenze tra le soluzioni.

  3. Per gestire gli errori, vedere Risolvere gli errori di convalida del livello.

Convalidare il codice al prompt dei comandi

  1. Aprire il prompt dei comandi di Visual Studio.

  2. Selezionare una delle opzioni seguenti:

    • Per convalidare il codice rispetto a un progetto di modellazione specifico nella soluzione, eseguire MSBuild con la proprietà personalizzata seguente.

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

        Passare alla cartella contenente il file del progetto di modellazione (con estensione modelproj) e il diagramma delle dipendenze e quindi eseguire MSBuild con la proprietà personalizzata seguente:

        msbuild /p:ValidateArchitecture=true
        
    • Per convalidare il codice rispetto a tutti i progetti di modellazione nella soluzione, eseguire MSBuild con la proprietà personalizzata seguente:

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

        Passare alla cartella della soluzione, che deve contenere un progetto di modellazione contenente un diagramma delle dipendenze, quindi eseguire MSBuild con la proprietà personalizzata seguente:

        msbuild /p:ValidateArchitecture=true
        

      Verranno elencati tutti gli errori che si verificano. Per altre informazioni su MSBuild, vedere Attività MSBuild e MSBuild.

    Per altre informazioni sugli errori di convalida, vedere Risolvere i problemi di convalida del livello.

Gestire gli errori di convalida

Durante il processo di sviluppo, potrebbe essere necessario eliminare alcuni conflitti segnalati durante la convalida. Ad esempio, è possibile eliminare gli errori che sono già stati corretti o che non sono attinenti allo scenario in questione. Quando si elimina un errore, è consigliabile registrare un elemento di lavoro in Team Foundation.

Avviso

Per creare un elemento di lavoro o aggiungere un collegamento ad esso, è necessario essere già connessi al controllo del codice sorgente TFS. Se si prova ad aprire una connessione in un'istanza diversa del controllo del codice sorgente TFS, Visual Studio chiude automaticamente la soluzione corrente. Prima di provare a creare un elemento di lavoro o ad aggiungervi un collegamento, verificare di essere già connessi all'istanza appropriata del controllo del codice sorgente. Nelle versioni successive di Visual Studio, i comandi di menu non sono disponibili se non si è connessi a un'istanza del controllo del codice sorgente.

Creare un elemento di lavoro per un errore di convalida

  • Nella finestra Elenco errori fare clic con il pulsante destro del mouse sull'errore, scegliere Crea elemento di lavoro e quindi fare clic sul tipo di elemento di lavoro che si desidera creare.

Usare queste attività per gestire gli errori di convalida nella finestra Elenco errori:

Per seguire le operazioni di seguito riportate
Eliminare gli errori selezionati durante la convalida Fare clic con il pulsante destro del mouse su uno o più errori selezionati, scegliere Gestisci errori di convalida e quindi fare clic su Elimina errori.

Gli errori eliminati vengono visualizzati come barrati. Alla successiva convalida, questi errori non saranno visualizzati.

Gli errori eliminati vengono rilevati in un file con estensione suppresss per il file del diagramma delle dipendenze corrispondente.
Interrompere l'eliminazione di errori selezionati Fare clic con il pulsante destro del mouse sull'errore o sugli errori eliminati selezionati, scegliere Gestisci errori di convalida e quindi fare clic su Interrompi eliminazione errori.

Alla successiva convalida, gli errori eliminati selezionati verranno visualizzati.
Ripristinare tutti gli errori eliminati nella finestra Elenco errori Fare clic con il pulsante destro del mouse in un punto qualsiasi della finestra Elenco errori, scegliere Gestisci errori di convalida e quindi fare clic su Mostra tutti gli errori eliminati.
Nascondere tutti gli errori eliminati dalla finestra Elenco errori Fare clic con il pulsante destro del mouse in un punto qualsiasi della finestra Elenco errori, scegliere Gestisci errori di convalida e quindi fare clic su Nascondi tutti gli errori eliminati.

Convalidare automaticamente il codice

È possibile eseguire la convalida dei livelli ogni volta che si esegue una compilazione. Se il team usa Azure DevOps, è possibile eseguire la convalida del livello con check-in controllati, che è possibile specificare creando un'attività MSBuild personalizzata e usando i report di compilazione per raccogliere gli errori di convalida. Per creare compilazioni di archiviazione controllate, vedere Archiviazione controllata del controllo della versione di Team Foundation.

Per convalidare automaticamente il codice durante una compilazione locale

Usare un editor di testo per aprire il file del progetto di modello (.modelproj), quindi includere la proprietà seguente:

<ValidateArchitecture>true</ValidateArchitecture>

- oppure -

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto di modellazione contenente il diagramma delle dipendenze o i diagrammi, quindi scegliere Proprietà.

  2. Nella finestra Proprietà impostare la proprietà Validate Architecture del progetto di modellazione su True.

    Il progetto di modello viene incluso nel processo di convalida.

  3. In Esplora soluzioni fare clic sul file del diagramma delle dipendenze (con estensione layerdiagram) da usare per la convalida.

  4. Nella finestra Proprietà verificare che la proprietà Azione di compilazione del diagramma sia impostata su Validate.

    Questo include il diagramma delle dipendenze nel processo di convalida.

Per gestire gli errori nella finestra Elenco errori, vedere Risolvere gli errori di convalida del livello.

Risolvere i problemi di convalida dei livelli

Nella tabella seguente vengono descritti i problemi di convalida dei livelli e la relativa risoluzione. Questi problemi differiscono dagli errori risultanti da conflitti tra il codice e la progettazione. Per altre informazioni su questi errori, vedere Risolvere i problemi di convalida del livello.

Problema Possibile causa Risoluzione
Gli errori di convalida non si verificano come previsto. La convalida non funziona sui diagrammi di dipendenza copiati da altri diagrammi di dipendenza in Esplora soluzioni e che si trovano nello stesso progetto di modellazione. I diagrammi di dipendenza copiati in questo modo contengono gli stessi riferimenti del diagramma delle dipendenze originale. Aggiungere un nuovo diagramma delle dipendenze al progetto di modellazione.

Copiare gli elementi dal diagramma delle dipendenze di origine nel nuovo diagramma.

Risolvere gli errori di convalida del livello

Quando si convalida il codice rispetto a un diagramma delle dipendenze, si verificano errori di convalida quando il codice è in conflitto con la progettazione. In presenza delle condizioni seguenti è possibile ad esempio che si verifichino errori di convalida:

  • Un artefatto viene assegnato al livello errato. In questo caso, spostare l'elemento.

  • Un elemento, ad esempio una classe, usa un'altra classe in un modo che causa conflitti con l'architettura. In questo caso, eseguire il refactoring del codice per rimuovere la dipendenza.

Per risolvere gli errori, aggiornare il codice finché non verranno più visualizzati errori di convalida. È possibile eseguire questa attività in modo iterativo.

Nella sezione seguente viene descritta la sintassi usata negli errori, viene illustrato il significato degli errori e vengono indicate le operazioni che è possibile eseguire per risolverli o gestirli.

Sintassi Descrizione
ArtifactN(ArtifactTypeN) ArtifactN è un artefatto associato a un livello nel diagramma delle dipendenze.

ArtifactTypeN è il tipo di ArtifactN, ad esempio una classe o un metodo:

MySolution.MyProject.MyClass.MyMethod(Metodo)
NamespaceNameN Nome di uno spazio dei nomi.
LayerNameN Nome di un livello nel diagramma delle dipendenze.
DependencyType Tipo di relazione di dipendenza tra Artifact1 e Artifact2. Ad esempio, Artifact1 ha una relazione Chiamate con Artifact2.
Sintassi degli errori Descrizione errore
DV0001: Dipendenza non valida Questo problema viene segnalato quando un elemento di codice (spazio dei nomi, tipo, membro) mappato a un livello fa riferimento a un elemento di codice mappato a un altro livello, ma non esiste alcuna freccia di dipendenza tra questi livelli nel diagramma di convalida delle dipendenze contenente questi livelli. Si tratta di una violazione del vincolo di dipendenza.
DV1001: nome dello spazio dei nomi non valido Questo problema viene segnalato su un elemento di codice associato a un livello che la proprietà "Allowed Namespace Names" non contiene lo spazio dei nomi in cui è definito questo elemento di codice. Si tratta di una violazione del vincolo di denominazione. Si noti che la sintassi di "Allowed Namespace Names" deve essere un elenco di punti e virgola degli spazi dei nomi in cui gli elementi di codice associati a sono consentiti definire il livello.
DV1002: Dipendenza da uno spazio dei nomi non referenziabile Questo problema viene segnalato su un elemento di codice associato a un livello e facendo riferimento a un altro elemento di codice definito in uno spazio dei nomi definito nella proprietà "Unreferenceable Namespace" del livello. Si tratta di una violazione del vincolo di denominazione. Si noti che la proprietà "Spazi dei nomi unreferenziabili" è definita come un elenco separato da punti e virgola di spazi dei nomi a cui non si deve fare riferimento negli elementi di codice associati a questo livello.
DV1003: Nome dello spazio dei nomi non consentito Questo problema viene segnalato su un elemento di codice associato a un livello che la proprietà "Nomi spazio dei nomi non consentiti" contiene lo spazio dei nomi in cui è definito questo elemento di codice. Si tratta di una violazione del vincolo di denominazione. Si noti che la proprietà "Nome spazio dei nomi non consentito" è definita come un elenco separato da punti e virgola degli spazi dei nomi in cui gli elementi di codice associati a questo livello non devono essere definiti.
DV2001: Presenza diagramma livello Questo problema viene segnalato in un progetto che non include un file di diagramma delle dipendenze, ma fa riferimento agli analizzatori di convalida delle dipendenze. Se la convalida delle dipendenze non è stata usata, è possibile rimuovere "Microsoft.DependencyValidation.Analyzers" direttamente da Esplora soluzioni o eliminare questo avviso. Per aggiungere un diagramma delle dipendenze, vedere Creare diagrammi di dipendenza dal codice.
DV2002: Base tipi non mappati Questo problema viene segnalato quando un elemento di codice non viene mappato ad alcun livello.
DV3001: Collegamento mancante Il livello 'LayerName' è collegato a 'Artifact' che non è possibile trovare. Probabilmente manca un riferimento a un assembly.
DV9001: L'analisi dell'architettura ha rilevato errori interni I risultati potrebbero non essere completi. Per altre informazioni, vedere il log dettagliato degli eventi di compilazione o la finestra di output.