Dodawanie walidacji niestandardowej architektury do diagramów warstw
W Visual Studio Ultimate i Visual Studio Premium, użytkownicy mogą sprawdzić poprawność kodu źródłowego w projekcie Visual Studio względem modelu warstwy, aby mogli zweryfikować, że kod źródłowy odpowiada zależnościom na diagramie warstwy.Istnieje algorytm standardowego sprawdzania poprawności, ale można zdefiniować własne rozszerzenia sprawdzania poprawności dla Visual Studio Ultimate i Visual Studio Premium.
Gdy użytkownik wybierze polecenie Sprawdzanie poprawności architektury na diagramie warstwy, wywoływana jest standardowa metoda sprawdzania poprawności, a następnie wszystkie rozszerzenia sprawdzania poprawności, które zostały zainstalowane.
[!UWAGA]
Sprawdzanie poprawności na diagramie warstwy nie jest takie sam, jak sprawdzanie poprawności na diagramach UML.Na diagramie warstwowym głównym celem jest porównanie diagramu z kodem programu w innych częściach rozwiązania.
Możesz spakować swoje rozszerzenie sprawdzania poprawności warstwy do Rozszerzeniu Integracji programu Visual Studio (VSIX), który można rozdystrybuować innym Visual Studio Ultimate użytkownikom.Teraz można umieścić swój moduł sam sprawdzający poprawność w VSIX lub można połączyć go w tym samym VSIX jako inne rozszerzenia.Należy wpisać kod modułu sprawdzania poprawności we własnym Visual Studio projekcie, nie w tym samym projekcie jako inne rozszerzenie.
Przestroga |
---|
Po utworzeniu projektu sprawdzania poprawności, należy skopiować przykładowy kod na końcu tego tematu, a następnie edytować go do własnych potrzeb. |
Wymagania
Visual Studio Ultimate
Visual Studio SDK
Wizualizacja Visual Studio i modelowanie SDK
Definiowanie walidatora warstwy w nowym VSIX
Najszybszą metodą tworzenia modułu sprawdzania poprawności jest użycie szablonu projektu.Te umieszcza kod i manifestu VSIX w tym samym projekcie.
Aby zdefiniować rozszerzenie przy użyciu szablonu projektu
Utwórz projekt w nowym rozwiązaniu za pomocą polecenia Nowy projekt w menu Plik.
W oknie dialogowym Nowy projekt w polu Projekty modelowania, wybierz opcję Rozszerzenie sprawdzania poprawności projektanta warstwy.
Ten szablon tworzy projekt zawierający krótki przykład.
Przestroga Aby szablon działał prawidłowo:
Edytuj wywołania LogValidationError, aby usunąć opcjonalne argumenty errorSourceNodes i errorTargetNodes.
Jeśli używasz właściwości niestandardowych, zastosuj aktualizacje wymienione w Dodawanie właściwości niestandardowych do diagramu warstwy.Ponadto, otwórz Eksploratora architektury przed otwarciem rozwiązania modelu.
Edytuj kod w celu zdefiniowania walidacji.Aby uzyskać więcej informacji, zobacz Programowanie walidacji.
Aby przetestować rozszerzenie, zobacz debugowanie sprawdzania poprawności warstwy.
[!UWAGA]
Twoja forma będzie wywoływana tylko w szczególnych okolicznościach, a punkty przerwania nie będą działać automatycznie.Aby uzyskać więcej informacji, zobacz Debugowanie walidacji warstwowej.
Aby zainstalować rozszerzenia w głównym wystąpieniu Visual Studio, lub na innym komputerze, należy znaleźć .vsix plik w bin\*.Skopiuj go do komputera, w którym chcesz go zainstalować, a następnie kliknij na nim dwukrotnie.Aby odinstalować go, należy użyć Extension Manager w menu Narzędzia.
Dodawanie warstwowego modułu walidującego do oddzielnego VSIX
Jeśli chcesz utworzyć jeden VSIX zawierający moduły sprawdzania warstwy, polecenia oraz inne rozszerzenia, zaleca się utworzenie jednego projektu do definiowania VSIX i oddzielnych projektów dla programów obsługi.Aby uzyskać informacje na temat innych rodzajów rozszerzenia modelowania, zobacz Rozszerzanie diagramów i modeli UML.
Aby dodać sprawdzanie poprawności warstwy do oddzielnego VSIX
Utwórz projekt biblioteki klas w nowym lub istniejącym rozwiązaniu Visual Studio Ultimate.W oknie dialogowym Nowy projekt kliknij przycisk Visual C#, a następnie kliknij Biblioteka klas.Projekt ten będzie zawierać klasy warstwy sprawdzania poprawności.
Określ lub utwórz projekt VSIX w rozwiązaniu.Projekt VSIX zawiera plik o nazwie source.extension.vsixmanifest.Jeśli trzeba dodać projekt VSIX, wykonaj następujące kroki:
W oknie dialogowym Nowy projekt wybierz Visual C#, Rozszerzalność, Projekt VSIX.
W Eksploratorze rozwiązań, w menu skrótów projektu VSIX, Ustaw jako projekt startowy.
W source.extension.vsixmanifest w polu Majątek dodaj projekt sprawdzania poprawności warstwy jako składnik MEF:
Wybierz przycisk Nowy.
W oknie dialogowym Dodaj nowy zasób ustaw:
Wpisz = Microsoft.VisualStudio.MefComponent
Źródło = projektu w bieżącym rozwiązaniu
Projekt = your validator project
Należy także dodać go jako sprawdzanie poprawności warstwy:
Wybierz przycisk Nowy.
W oknie dialogowym Dodaj nowy zasób ustaw:
Wpisz = Microsoft.VisualStudio.ArchitectureTools.Layer.Validator.Nie jest jedną z opcji na liście rozwijanej.Musisz wprowadzić to przy użyciu klawiatury.
Źródło = projektu w bieżącym rozwiązaniu
Projekt = your validator project
Wróć do projektu warstwy sprawdzania poprawności i dodaj następujące odwołania do projektu:
Odwołanie
Co Ci to pozwala zrobić
Microsoft.VisualStudio.GraphModel.dll
Odczytaj wykres architektury
Microsoft.VisualStudio.ArchitectureTools.Extensibility.CodeSchema.dll
Odczytać kod DOM skojarzony z warstwami
Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer.dll
Przeczytaj warstwy modelu
Microsoft.VisualStudio.ArchitectureTools.Extensibility
Przeczytaj i aktualizuj kształty i diagramy.
System.ComponentModel.Composition
Zdefiniuj składnik walidacji za pomocą Managed Extensibility Framework (MEF).
Microsoft.VisualStudio.Modeling.Sdk.12.0
Zdefiniuj rozszerzenia modelowania
Kopiuj przykładowy kod na końcu tego tematu w pliku klasy w projekcie walidatora biblioteki, aby uwzględnić kod przy sprawdzaniu poprawności.Aby uzyskać więcej informacji, zobacz Programowanie walidacji.
Aby przetestować rozszerzenie, zobacz debugowanie sprawdzania poprawności warstwy.
[!UWAGA]
Twoja forma będzie wywoływana tylko w szczególnych okolicznościach, a punkty przerwania nie będą działać automatycznie.Aby uzyskać więcej informacji, zobacz Debugowanie walidacji warstwowej.
Aby zainstalować VSIX w w głównym wystąpieniu Visual Studio, lub na innym komputerze, należy znaleźć .vsix plik w bin katalogu projektów VSIX.Skopiuj go do komputera, w którym chcesz zainstalować VSIX.Kliknij dwukrotnie plik VSIX w Eksploratorze Windows. (Eksplorator plików w systemie Windows 8).
Aby odinstalować go, należy użyć Extension Manager w menu Narzędzia.
Sprawdzanie poprawności programowania
Aby zdefiniować rozszerzenie warstwy sprawdzania poprawności, zdefiniujesz klasę, która ma następujące cechy:
Ogólny formularz zgłoszenia jest następujący:
using System.ComponentModel.Composition; using Microsoft.VisualStudio.ArchitectureTools.Extensibility.CodeSchema; using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer; using Microsoft.VisualStudio.GraphModel; ... [Export(typeof(IValidateArchitectureExtension))] public partial class Validator1Extension : IValidateArchitectureExtension { public void ValidateArchitecture(Graph graph) { GraphSchema schema = graph.DocumentSchema; ... } }
Po wykryciu błędu, możesz go zgłosić za pomocą LogValidationError().
Przestroga Nie używaj parametrów opcjonalnych LogValidationError.
Kiedy użytkownik wywoła Sprawdzanie poprawności architektury polecenia menu, system plików środowiska uruchomieniowego warstwy analizuje warstwy i ich artefakty w celu przedstawienia ich na wykresie.Wykres ma cztery części:
Modele warstwy Visual Studio rozwiązania, które są reprezentowane jako węzły i łącza na wykresie.
Kod, elementy projektu i inne przedmioty, które są zdefiniowane w rozwiązaniu i reprezentowane jako węzły i łącza, które reprezentują zależności odnalezione przez proces analizy.
Łączy z węzłów warstwy do węzłów artefaktu kodu.
Węzły, które reprezentują błędy wykryte przez walidatora.
Gdy wykres został skonstruowany, wywoływana jest standardowa metoda sprawdzania poprawności.Po zakończeniu tej operacji, wszystkie metody sprawdzania poprawności zainstalowanych rozszerzeń są wywoływane w nieokreślonej kolejności.Wykres jest przekazywany do każdej ValidateArchitecture metody, która pozwala na skanowanie wykresu i zgłasza wszelkie błędy, które znajdzie.
[!UWAGA]
To nie jest taki sam, jak proces sprawdzania poprawności, który jest stosowany do diagramów UML i nie jest taki sam, jak proces sprawdzania poprawności, który może być używany w językach specyficznych dla domeny.
Metody sprawdzania poprawności nie powinny zmieniać warstwy modelu lub kod, który jest sprawdzany.
Model wykresu jest zdefiniowany w Microsoft.VisualStudio.GraphModel.Jego główne klasy to GraphNode i GraphLink.
Każdy węzeł i każde łącze posiada jedną lub więcej kategorii, które określają typ elementu lub relacji, który reprezentuje.Węzły typowych wykresów mają następujące kategorie:
Dsl.LayerModel
Dsl.Layer
Dsl.Reference
CodeSchema_Type
CodeSchema_Namespace
CodeSchema_Type
CodeSchema_Method
CodeSchema_Field
CodeSchema_Property
Łączy z warstwy do elementów w kodzie z kategorią „Reprezentuje”.
Debugowanie sprawdzania poprawności
Aby debugować rozszerzenie warstwy sprawdzania poprawności, naciśnij kombinację klawiszy CTRL + F5.Otwiera eksperymentalne wystąpienie Visual Studio.W tym wypadku otwórz lub utwórz model warstwy.Ten model musi być skojarzony z kodem i musi mieć co najmniej jedną współzależność.
Przetestuj rozwiązanie, które zawiera zależności
Sprawdzanie poprawności nie jest wykonywane, chyba że występują następujące cechy:
Istnieje co najmniej jedno łącze zależność w diagramie warstwy.
Istnieją warstwy w modelu, które są skojarzone z elementami kodu.
Przy pierwszym uruchomieniu wystąpienia doświadczalnego Visual Studio do testowania twojego rozszerzenia sprawdzania poprawności, otwórz lub utwórz rozwiązanie, które ma te cechy.
Uruchom czyste rozwiązanie przez sprawdzeniem poprawności architektury
W każdym przypadku, gdy należy zaktualizować kod sprawdzania poprawności, należy użyć Czystego rozwiązani polecenia na Kompilacji menu w eksperymentalnym rozwiązaniu, zanim zaczniesz testować polecenie sprawdzania poprawności.Jest to konieczne, ponieważ wyniki weryfikacji są buforowane.Jeśli test diagramu warstwy lub jego kod nie zostały zaktualizowane, nie można wykonać metod sprawdzania poprawności.
Jawnie uruchom program debugera
Sprawdzanie poprawności działa w oddzielnym procesie.W związku z tym punkty przerwania wybranej metody sprawdzania poprawności nie zostaną wyzwolone.Należy dołączyć debuger jawnie do proces, gdy sprawdzania poprawności zostało rozpoczęte.
Aby dołączyć debuger do procesu sprawdzania poprawności, należy wstawić numer telefonu, aby System.Diagnostics.Debugger.Launch() na początku wybranej metody sprawdzania poprawności.Gdy pojawi się okno dialogowe debugowania, wybierz wystąpienie główne Visual Studio.
Alternatywnie, można wstawić wywołanie do System.Windows.Forms.MessageBox.Show().Kiedy zostanie wyświetlone okno komunikatu, przejdź do głównego wystąpienia Visual Studio i w menu Debuguj kliknij Dołącz do procesu.Wybierz proces, który nazywa się Graphcmd.exe.
Zawsze uruchamiaj wystąpienie doświadczalne naciskając kombinację klawiszy CTRL + F5 (Uruchom bez debugowania).
Wdrażanie rozszerzenie sprawdzania poprawności
Aby zainstalować rozszerzenie sprawdzania poprawności na komputerze, na którym Visual Studio Ultimate lub Visual Studio Premium jest zainstalowany, otwórz plik VSIX na komputerze docelowym.Aby zainstalować na komputerze, na którym Team Foundation Build jest zainstalowany, należy ręcznie wyodrębnić zawartości VSIX do folderu rozszerzeń.Aby uzyskać więcej informacji, zobacz Wdrażanie rozszerzenia modelowanie warstwy.
Przykład kodu
using System;
using System.ComponentModel.Composition;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.CodeSchema;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer;
using Microsoft.VisualStudio.GraphModel;
namespace Validator3
{
[Export(typeof(IValidateArchitectureExtension))]
public partial class Validator3Extension : IValidateArchitectureExtension
{
/// <summary>
/// Validate the architecture
/// </summary>
/// <param name="graph">The graph</param>
public void ValidateArchitecture(Graph graph)
{
if (graph == null) throw new ArgumentNullException("graph");
// Uncomment the line below to debug this extension during validation
// System.Windows.Forms.MessageBox.Show("Attach 2 to GraphCmd.exe with process id " + System.Diagnostics.Process.GetCurrentProcess().Id);
// Get all layers on the diagram
foreach (GraphNode layer in graph.Nodes.GetByCategory("Dsl.Layer"))
{
System.Threading.Thread.Sleep(100);
// Get the required regex property from the layer node
string regexPattern = "^[a-zA-Z]+$"; //layer[customPropertyCategory] as string;
if (!string.IsNullOrEmpty(regexPattern))
{
Regex regEx = new Regex(regexPattern);
// Get all referenced types in this layer including those from nested layers so each
// type is validated against all containing layer constraints.
foreach (GraphNode containedType in layer.FindDescendants().Where(node => node.HasCategory("CodeSchema_Type")))
{
// Check the type name against the required regex
CodeGraphNodeIdBuilder builder = new CodeGraphNodeIdBuilder(containedType.Id, graph);
string typeName = builder.Type.Name;
if (!regEx.IsMatch(typeName))
{
// Log an error
string message = string.Format(CultureInfo.CurrentCulture, Resources.InvalidTypeNameMessage, typeName);
this.LogValidationError(graph, typeName + "TypeNameError", message, GraphErrorLevel.Error, layer);
}
}
}
}
}
}
}