Convalidare il codice con diagrammi livello
Per assicurarsi che il codice non sia in conflitto con la progettazione, è possibile convalidare il codice ai diagrammi livello in Visual Studio ultimate e Visual Studio premium.Ciò consente di:
Cercare eventuali conflitti tra le dipendenze nel codice e le dipendenze nel diagramma livello.
Trovare le dipendenze sulle quali potrebbero influire le modifiche proposte.
Ad esempio, è possibile modificare il diagramma livello per mostrare le potenziali modifiche all'architettura e quindi convalidare il codice per vedere le dipendenze interessate.
Effettuare il refactoring o la migrazione del codice in una progettazione diversa.
Trovare codice o dipendenze che richiedono il lavoro quando si sposta il codice in un'architettura diversa.
È possibile convalidare manualmente il codice da un diagramma livello aperto in Visual Studio o da un prompt dei comandi.È anche possibile convalidare il codice automaticamente durante la compilazione in esecuzione o Team Foundation Build locale.Vedere Video channel 9: Progetti e convalidare l'architettura utilizzando diagrammi livello.
Requisiti
Visual Studio premium o ultimate di Visual Studio
Una soluzione contenente un progetto di modello con un diagramma livello.Questo diagramma livello deve essere collegato agli elementi in Visual c .NET o Visual Basic .NET. i progetti che si desidera convalidare.Vedere Creare diagrammi livello dal codice.
Per
Vedere se l'elemento supporta la convalida
Includere altri assembly .NET e progetti per la convalida
Convalidare manualmente il codice
Convalidare automaticamente il codice
Risolvere i problemi di convalida dei livelli
Individuare e risolvere gli errori di convalida dei livelli
Vedere se l'elemento supporta la convalida
Nel diagramma livello, selezionare uno o più livelli, fare clic con il pulsante destro del mouse sulla selezione e scegliere Visualizza collegamenti.
In Esplora livello, esaminare la colonna Convalida supporti.Se il valore è false, l'elemento non supporta la convalida.
È possibile collegare i siti Web, i documenti di Office e i file di testo normale ai livelli, 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 nessuna dipendenza tra i livelli.Tali riferimenti non vengono considerati dipendenze a meno che il codice non li utilizzi.
Includere altri assembly .NET e progetti per la convalida
Quando si trascinano elementi nel diagramma livello, i riferimenti agli assembly .NET o ai progetti corrispondenti vengono aggiunti automaticamente alla cartella Layer References nel progetto di modello.Questa cartella contiene i riferimenti agli assembly e i progetti analizzati durante la convalida.È possibile includere altri assembly .NET e progetti per la convalida manualmente senza trascinarli nel diagramma livello.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto di modello o sulla cartella Riferimenti livello, quindi scegliere Aggiungi riferimento.
Nella finestra di dialogo Aggiungi riferimento selezionare gli assembly o i progetti, quindi fare clic su OK.
Convalidare manualmente il codice
Se si dispone di un diagramma livello aperto collegato agli elementi della soluzione, è possibile eseguire il comando di scelta rapida Convalida il diagramma.È inoltre possibile utilizzare 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 intercettare precedenza dei conflitti di dipendenza.
Per convalidare il codice da un diagramma livello aperto
Fare clic con il pulsante destro del mouse sulla superficie del diagramma e scegliere Convalida architettura.
[!NOTA]
Per impostazione predefinita, la proprietà Operazione di compilazione del file del diagramma livello (con estensione layerdiagram) viene impostata su Convalida al fine di includere il diagramma nel processo di convalida.
Nella finestra Elenco errori vengono riportati gli eventuali errori verificatisi.Per ulteriori informazioni sugli errori di convalida, vedere Individuare e risolvere gli errori di convalida dei livelli.
Per visualizzare l'origine di ciascun errore, fare doppio clic sull'errore nella finestra Elenco errori.
[!NOTA]
In Visual Studio potrebbe essere visualizzato un grafico delle dipendenze anziché l'origine dell'errore.Ciò si verifica quando il codice presenta una dipendenza in un assembly che non è specificata nel diagramma livello o quando al codice manca una dipendenza specificata nel diagramma livello.Esaminare il grafico delle dipendenze o il codice per determinare se la dipendenza deve esistere.Per ulteriori informazioni sui grafici delle dipendenze, vedere Visualizzare le dipendenze di codice nei grafici dipendenze.
Per gestire gli errori, vedere Gestire gli errori di convalida.
Per convalidare il codice al prompt dei comandi
Aprire il prompt dei comandi di Visual Studio.
Effettuare una delle seguenti operazioni:
Per convalidare il codice rispetto a un progetto di modello specifico nella soluzione, eseguire MSBuild con la seguente proprietà personalizzata.
msbuild <FilePath+ModelProjectFileName>.modelproj /p:ValidateArchitecture=true
- oppure -
Passare alla cartella contenente il file di progetto di modello (con estensione modelproj) e il diagramma livello, quindi eseguire MSBuild con la seguente proprietà personalizzata.
msbuild /p:ValidateArchitecture=true
Per convalidare il codice rispetto a tutti i progetti di modello nella soluzione, eseguire MSBuild con la seguente proprietà personalizzata:
msbuild <FilePath+SolutionName>.sln /p:ValidateArchitecture=true
- oppure -
Individuare la cartella della soluzione che deve contenere un progetto di modello che a sua volta contiene un diagramma livello, quindi eseguire MSBuild con la seguente proprietà personalizzata.
msbuild /p:ValidateArchitecture=true
Verranno elencati tutti gli errori che si verificano.Per ulteriori informazioni su MSBuild, vedere MSBuild e Attività MSBuild.
Per ulteriori informazioni sugli errori di convalida, vedere Individuare e risolvere gli errori di convalida dei livelli.
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, è buona norma registrare un elemento di lavoro in Team Foundation.
Per 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, quindi fare clic sul tipo di elemento di lavoro che si desidera creare.
Per gestire errori di convalida nella finestra Elenco errori utilizzare queste attività:
Per |
Si seguano le seguenti istruzioni |
---|---|
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, 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 registrati in un file con estensione suppressions per il file del diagramma livello 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 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 su un punto qualsiasi della finestra Elenco errori, scegliere Gestisci errori di convalida, 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 su un punto qualsiasi della finestra Elenco errori, scegliere Gestisci errori di convalida, quindi fare clic su Nascondi tutti gli errori eliminati. |
Convalidare automaticamente il codice
È possibile eseguire ogni volta la convalida dei livelli che si esegue una compilazione.Se il team utilizza Team Foundation Build, è possibile eseguire la convalida dei livelli nelle archiviazioni gestite, che è possibile specificare la creazione di attività MSBuild personalizzato e utilizzare i rapporti di compilazione per raccogliere gli errori di convalida. Per creare le compilazioni di archiviazione gestita, vedere Definire un processo di compilazione di archiviazione gestita per convalidare le modifiche.
Per convalidare automaticamente il codice durante una compilazione locale.
- Utilizzare un editor di testo per aprire il file del progetto di modello (.modelproj), quindi includere la proprietà seguente:
<ValidateArchitecture>true</ValidateArchitecture>
- oppure -
In Esplora soluzioni, fare clic con il pulsante destro del mouse nel progetto di modello contenente il diagramma o i diagrammi livello, quindi fare clic su Proprietà.
Nella finestra Proprietà, impostare la proprietà Convalida architettura del progetto di modello su True.
Il progetto di modello viene incluso nel processo di convalida.
In Esplora soluzioni fare clic sul file del diagramma livello (con estensione layerdiagram) che si desidera utilizzare per la convalida.
Nella finestra Proprietà controllare che la proprietà Azione compilazione del diagramma sia impostata su Convalida.
Il diagramma livello viene incluso nel processo di convalida.
Per gestire errori di convalida nella finestra, vedere Elenco errori.
Per convalidare il codice automaticamente durante un'operazione di Team Foundation Build.
In Team Explorer, fare doppio clic sulla definizione della compilazione e scegliere Processo.
Sotto Parametri processo di compilazione, espandere Compilazione e digitare il seguente nel parametro MSBuild Arguments:
/p:ValidateArchitecture=true
Per ulteriori informazioni sugli errori di convalida, vedere Individuare e risolvere gli errori di convalida dei livelli.Per ulteriori informazioni su Team Foundation Build, vedere:
Definire un processo di compilazione basato sul modello predefinito
Definire una compilazione utilizzando il modello di aggiornamento
Creare e utilizzare un modello di processo di compilazione personalizzato
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 ulteriori informazioni su questi errori, vedere Individuare e risolvere gli errori di convalida dei livelli.
Problema |
Possibile causa |
Risoluzione |
---|---|---|
Gli errori di convalida non si verificano come previsto. |
La convalida non funziona sui diagrammi livello copiati da altri diagrammi livello in Esplora soluzioni e appartenenti allo stesso progetto di modello.I diagrammi livello copiati in questo modo contengono gli stessi riferimenti del diagramma livello originale. |
|
La comprensione e la risoluzione degli errori di convalida dei livelli
Quando si esegue la convalida del codice in base a un diagramma livello, se il codice è in conflitto con la progettazione si verificano errori di convalida.Ad esempio, in presenza delle condizioni seguenti è possibile che si verifichino errori di convalida del livello:
Un elemento viene assegnato al livello errato.In questo caso, spostare l'elemento.
Un elemento, ad esempio una classe, utilizza 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 questi errori, aggiornare il codice finché non verranno più visualizzati errori di convalida.È possibile eseguire questa attività in modo iterativo.
La seguente sezione viene descritta la sintassi utilizzata in questi errori, viene illustrato il significato di questi errori e suggerisce che è possibile eseguire per risolverli o gestirli.
Sintassi |
Descrizione |
---|---|
ArtifactN(ArtifactTypeN) |
ArtifactN è un elemento associato a un livello nel diagramma livello. ArtifactTypeN è il tipo di ArtifactN, quale una Classe o un Metodo, ad esempio: MySolution.MyProject.MyClass.MyMethod(Metodo) |
NamespaceNameN |
Nome di uno spazio dei nomi. |
LayerNameN |
Nome di un livello nel diagramma livello. |
DependencyType |
Tipo di relazione di dipendenza tra Artifact1 e Artifact2.Ad esempio, Artifact1 ha una relazione Chiamate con Artifact2. |
Errore di sintassi. |
Errore di descrizione. |
---|---|
AV0001: dipendenza non valida: Artifact1(ArtifactType1)--> Artifact2(ArtifactType2) Livelli: LayerName1, LayerName2 | Dipendenze: DependencyType |
Artifact1 in LayerName1 non deve avere una dipendenza con Artifact2 in LayerName2 perché LayerName1 non ha una dipendenza diretta con LayerName2. |
AV1001: spazio dei nomi non valido: Artifact Livello: LayerName | Spazio dei nomi richiesto: NamespaceName1 | Spazio dei nomi corrente: NamespaceName2 |
LayerName richiede che gli elementi associati appartengano a NamespaceName1.Artifact si trova in NamespaceName2, non in NamespaceName1. |
AV1002: utilizzo dello spazio dei nomi non consentito: Artifact1(ArtifactType1) | Artifact2(ArtifactType2) Livello: LayerName | Spazio dei nomi non consentito: NamespaceName | Dipendenze: DependencyType |
LayerName richiede che gli elementi associati non dipendano da NamespaceName.Artifact1 non può dipendere da Artifact2 perché Artifact2 si trova in NamespaceName. |
AV1003: nello spazio dei nomi non consentito: Artifact(ArtifactType) Livello: LayerName | Spazio dei nomi non consentito: NamespaceName |
LayerName richiede che gli elementi associati non possano appartenere a NamespaceName.Artifact appartiene a NamespaceName. |
AV3001: collegamento mancante: il livello 'LayerName' si collega a 'Artifact' che non viene trovato.Probabilmente manca un riferimento a un assembly. |
LayerName si collega a un elemento che non può essere trovato.Ad esempio, è possibile che manchi un collegamento a una classe perché nel progetto di modellazione manca un riferimento all'assembly che contiene la classe. |
AV9001: errori interni durante l'analisi dell'architettura.I risultati potrebbero non essere completi.Vedere il log dettagliato degli eventi di compilazione o la finestra di output per ulteriori informazioni. |
Vedere il log dettagliato degli eventi di compilazione o la finestra di output per ulteriori informazioni. |