Condividi tramite


Convalidare il codice con diagrammi di dipendenza

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:

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

  • Trovare le dipendenze che potrebbero essere interessate dalle 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 eseguire la migrazione del codice in una progettazione diversa.

    Trovare codice o dipendenze che richiedono interventi quando si trasferisce 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. Consulta Crea 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.

Verificare 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 vengono visualizzati per i riferimenti a progetti o assembly collegati a livelli separati quando non vengono visualizzate dipendenze tra tali livelli. Tali riferimenti non vengono considerati dipendenze a meno che il codice non usi tali riferimenti.

  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 Validazione supporti. Se il valore è false, l'elemento non supporta la convalida.

Includere altri assembly e progetti .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 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 avviare il comando di Convalida rapido 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, quando si apportano modifiche al codice, eseguire regolarmente la convalida del livello in modo che sia possibile intercettare i conflitti di dipendenza in anticipo.

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.

    Annotazioni

    Per impostazione predefinita, la proprietà Build Action 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 .

    Annotazioni

    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 eventuali 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 dei conflitti segnalati durante la convalida. Ad esempio, è possibile sopprimere gli errori che sono già in fase di risoluzione o che non sono rilevanti per il vostro scenario specifico. Quando si elimina un errore, è consigliabile registrare un elemento di lavoro in Team Foundation.

Avvertimento

È necessario essere già connessi a TFS Source Code Control (SCC) per creare o collegare un elemento di lavoro. Se si tenta di aprire una connessione a un SCC TFS diverso, Visual Studio chiude automaticamente la soluzione corrente. Assicurati di essere già connesso alla configurazione SCC appropriata prima di tentare di creare o collegare un elemento di lavoro. Nelle versioni successive di Visual Studio i comandi di menu non sono disponibili se non si è connessi a un SCC.

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 :

a Seguire questa procedura
Elimina 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 soppressi vengono visualizzati con la formattazione barrata. Quando si esegue la convalida la prossima volta, questi errori non verranno visualizzati.

Gli errori soppressi vengono rilevati in un file con estensione .suppressions per il file del diagramma delle dipendenze corrispondente.
Interrompere l'eliminazione degli 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.

Gli errori soppressi selezionati verranno visualizzati quando si esegue la convalida alla prossima esecuzione.
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 del livello ogni volta che si esegue una compilazione locale. 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 controllate con accettazione vincolata, vedere Check-in controllato TFVC.

Per convalidare automaticamente il codice durante una compilazione locale

Usare un editor di testo per aprire il file del progetto di modellazione (con estensione modelproj) e quindi includere la proprietà seguente:

<ValidateArchitecture>true</ValidateArchitecture>

o

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto di modellazione che contiene 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.

    Questo include il progetto di modellazione nel processo di convalida.

  3. In Esplora soluzioni, fare clic sul file del diagramma delle dipendenze (.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 dello strato

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

Issue Causa possibile Resolution
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. Ad esempio, le condizioni seguenti potrebbero causare errori di convalida:

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

  • Un artefatto, ad esempio una classe, usa un'altra classe in un modo in conflitto con l'architettura. In questo caso, effettuare il refactoring del codice per rimuovere la dipendenza.

Per risolvere questi errori, aggiornare il codice fino a quando non vengono visualizzati altri errori durante la convalida. È possibile eseguire questa attività in modo iterativo.

La sezione seguente descrive la sintassi usata in questi errori, spiega il significato di questi errori e suggerisce le operazioni che è possibile eseguire per risolverli o gestirli.

Syntax 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(Method)
NamespaceNameN Nome di un 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 separato da punti e virgola degli spazi dei nomi in cui gli elementi di codice associati a un livello sono consentiti di essere definiti.
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 la cui proprietà "Nomi di spazi 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 di diagramma di 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 dei 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. Manca un riferimento all'assembly?
DV9001: L'analisi dell'architettura ha rilevato errori interni I risultati potrebbero non essere completi. Per maggiori informazioni, consultare il log dettagliato degli eventi di compilazione o la finestra dell'output.