Convalidare il codice con diagrammi livello
Per assicurarsi che il codice non sia in conflitto con la progettazione, è possibile convalidare il codice con diagrammi livello in Visual Studio Ultimate e Visual Studio Premium. In questo modo è possibile effettuare le operazioni seguenti:
Trovare 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 azioni 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. È inoltre possibile convalidare il codice automaticamente quando sono in esecuzione compilazioni locali o Team Foundation Build. Vedere il video di Channel 9 su come progettare e convalidare l'architettura con i diagrammi livello
Importante
Se si desidera eseguire la convalida dei livelli in Team Foundation Build, è inoltre necessario installare Visual Studio Ultimate nel server di compilazione.
Requisiti
Visual Studio Ultimate o Visual Studio Premium
Visual Studio Ultimate sul server Team Foundation Build in uso per convalidare il codice automaticamente con Team Foundation Build
Una soluzione che contiene un progetto di modello con un diagramma livello. Questo diagramma livello deve essere collegato agli elementi nei progetti Visual C# .NET o Visual Basic .NET da convalidare. Vedere Creare diagrammi livello dal codice.
Vedere se un elemento supporta la convalida
Includere altri progetti e assembly .NET 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 un elemento supporta la convalida
È possibile collegare i livelli a siti Web, documenti 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 utilizzi.
Selezionare uno o più livelli sul diagramma livello, fare clic con il pulsante destro del mouse sulla selezione, quindi scegliere Visualizza collegamenti.
In Esplora livello, esaminare la colonna Convalida supporti. Se il valore è false, l'elemento non supporta la convalida.
Includere altri progetti e assembly .NET per la convalida
Quando si trascinano elementi nel diagramma livello, i riferimenti agli assembly .NET o ai progetti corrispondenti vengono aggiunti automaticamente alla cartella Riferimenti livello nel progetto di modello. 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 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 nel 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 rilevare tempestivamente 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 altre 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 altre informazioni sui grafici delle dipendenze, vedere Mappare le dipendenze nel codice su grafici di 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 altre informazioni su MSBuild, vedere MSBuild e Attività MSBuild.
Per altre 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 errori eliminati. |
Convalidare automaticamente il codice
È possibile eseguire la convalida dei livelli ogni volta che si esegue una compilazione. Se il team usa Team Foundation Build, è possibile eseguire la convalida dei livelli nelle archiviazioni gestite, che si possono specificare creando un'attività personalizzata MSBuild, e usare i report di compilazione per raccogliere gli errori di convalida. Per creare le compilazioni di archiviazione gestita, vedere Utilizzare un processo di compilazione di archiviazione gestita per convalidare le modifiche.
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-
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 Gestire gli errori di convalida.
Per convalidare 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 altre informazioni sugli errori di convalida, vedere Individuare e risolvere gli errori di convalida dei livelli. Per altre informazioni su Team Foundation Build, vedere:
Utilizzare il modello predefinito per il processo di compilazione
Definire una compilazione utilizzando il modello di aggiornamento
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 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. |
|
Individuazione e risoluzione degli errori di convalida dei livelli
Quando si esegue la convalida di codice in base a un diagramma livello, se il codice è in conflitto con la progettazione si verificano errori di convalida. In presenza delle condizioni seguenti è possibile ad esempio che si verifichino errori di convalida:
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 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 utilizzata negli errori, viene illustrato il significato degli errori e vengono indicate le operazioni che è possibile eseguire per risolverli o gestirli.
Sintassi |
Descrizione |
---|---|
ElementoN(TipoElementoN) |
ElementoN è un elemento associato a un livello nel diagramma livello. TipoElementoN è il tipo di ElementoN, ad esempio Classe o Metodo, ad esempio: MySolution.MyProject.MyClass.MyMethod(Metodo) |
NomeSpazioDeiNomiN |
Nome di uno spazio dei nomi. |
NomeLivelloN |
Nome di un livello nel diagramma livello. |
TipoDipendenza |
Tipo di relazione di dipendenza tra Elemento1 ed Elemento2. Ad esempio, Elementot1 ha una relazione di tipo Chiama con Elemento2. |
Sintassi errore |
Descrizione errore |
---|---|
AV0001: dipendenza non valida: Elemento1(TipoElemento1) --> Elemento2(TipoElemento2) Livelli: NomeLivello1, NomeLivello2 | Dipendenze: TipoDipendenza |
Elemento1 in NomeLivello1 non deve avere una dipendenza in Elemento2 in NomeLivello2 perché NomeLivello1 non ha una dipendenza diretta in NomeLivello2. |
AV1001: spazio dei nomi non valido: Elemento Livello: NomeLivello | Spazio dei nomi richiesto: NomeSpazioDeiNomi1 | Spazio dei nomi corrente: NomeSpazioDeiNomi2 |
NomeLivello richiede che gli elementi collegati appartengano a NomeSpazioDeiNomi1. Elemento è in NomeSpazioDeiNomi2, non in NomeSpazioDeiNomi1. |
AV1002: dipende dallo spazio dei nomi non consentito: Elemento1(TipoElemento1) | Elemento2(TipoElemento2) Livello: NomeLivello | Spazio dei nomi non consentito: NomeSpazioDeiNomi | Dipendenze: TipoDipendenza |
NomeLivello richiede che gli elementi associati non dipendano da NomeSpazioDeiNomi. Elemento1 non può dipendere da Elemento2 perché Elemento2 è in NomeSpazioDeiNomi. |
AV1003: nello spazio dei nomi non consentito: Elemento(TipoElemento) Livello: NomeLivello | Spazio dei nomi: NomeSpazioDeiNomi |
NomeLivello richiede che gli elementi collegati non può appartenere a NomeSpazioDeiNomi. Elemento appartiene a NomeSpazioDeiNomi. |
AV3001: collegamento mancante: il livello 'NomeLivello' si collega a 'Elemento' che non viene trovato. Probabilmente manca un riferimento a un assembly. |
NomeLivello si collega a un elemento che non viene 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. Per altre informazioni, vedere il log dettagliato degli eventi di compilazione o la finestra di output. |
Per altre informazioni, vedere il log degli eventi di compilazione o la finestra di output. |