02.02.2006, 00:00 Uhr

GAT ? Guidance Automation Toolkit

Visual Studio 2005 lässt sich um eigene Assistenten, Projekttypen, Addins, Macros oder VSIP Packages erweitern. Damit aber diese Schnittstellen wirklich leistungsfähig einsetzbar sind, müssen Sie sehr viel über die internen Konzepte, Details und Vorgehensweisen von Visual Studio 2005 wissen. Microsoft bietet daher mit dem Visual Studio 2005 eine zusätzliche Erweiterungsmöglichkeit an: das Guidance Automation Toolkit oder kurz GAT.
Von Klaus Aschenbrenner
Das Visual Studio 2005 ist eine Entwicklungsumgebung die von vorne bis hinten erweitert und konfiguriert werden kann. Der einfachste Fall ist dabei die Verwendung von Macros für die Automatisierung von wiederkehrenden Aufgaben. Haben Sie Aufgaben die mehrere Schritte umfassen, können Sie diese ebenfalls in einen Wizard auslagern, der sich anschließend nahtlos in das Visual Studio 2005 integrieren lässt. Eine andere Möglichkeit, die uns ebenfalls das Visual Studio 2005 anbietet ist, dass Sie eigene Projekttypen implementieren, die sich anschließend unter den Menüpunkt File/New/Project... auswählen lassen.




Diese ganzen Erweiterungsmöglichkeiten klingen jetzt sehr interessant, sind aber zugleich auch sehr schwer anzuwenden, weil Sie immer wieder mit internen Konzepten von Visual Studio 2005 konfrontiert werden, wenn Sie eine dieser Schnittstellen anprogrammieren. Wenn Sie daher wirklich eine sehr leistungsfähige Lösung implementieren möchten, müssen Sie sich schon einige Zeit mit dem Visual Studio 2005 und dessen Dokumentation auseinandersetzen.




Auch Microsoft hat dieses Problem erkannt bzw. auch am eigenen Leibe erfahren. Die Pattern & Practises Group von Microsoft bringt laufend neue Application Building Blocks und Referenzarchitekturen zur .NET Programmierung heraus – sogenannte Guidances (Richtlinien). Wenn Sie aber all diese Guidances beherschen möchten, müssen Sie sich durch tausende Seiten von Dokumentionen, Samples und Tutorials quälen. Microsoft hat daher noch keinen geeigneten Weg gefunden, um diese Richtlinien für Sie als Entwickler einfach und indiutiv in das Visual Studio 2005 zu integrieren.




Das gleiche Problem kann auch Sie als Firma treffen, wenn Sie intern eine Reihe von Richtlinien entwickelt haben, die in Ihren .NET Projekten immer wieder umgesetzt werden müssen. Oder wenn Sie spezialisierte Frameworks entwickelt haben, die in jedem .NET Projekt eingesetzt werden müssen. Wie können Sie aber solche Richtlinien in Ihre Projektstruktur von Visual Studio 2005 integrieren? Die Antwort ist leicht: gar nicht oder Sie brauchen dafür sehr viel Zeit!





Guidance Automation Toolkit





Die Lösung für all diese Fragen ist das Guidance Automation Toolkit (GAT). Bei GAT handelt es sich um eine zusätzliche Erweiterungsschnittstelle zu Visual Studio 2005, die sehr leicht und einfach zu verwenden ist. Lösungen die Sie mit GAT erstellen, werden in Form von XML Dateien beschrieben und integrieren sich dann nahtlos in das Visual Studio 2005. Die nächste Abbildung zeigt den Guidance Lifecycle, der sich hinter GAT verbirgt:





 












 












 





Wie Sie aus der Abbildung erkennen können, sind verschiedene Rollen daran beteiligt, wenn eine Lösung mit GAT implementiert wird. Die erste wichtige Rolle ist der Guidance Author, also diejenige Person, die eine Lösung auf der Basis von GAT implementiert. Die gesamte Lösung, die sich dann in das Visual Studio 2005 integrieren lässt, nennt sich Guidance Package und ist im Normalfall ein MSI-Package, das sich auf einem anderen Rechner durch den Guidance Consumer installieren lässt.




Der Guidance Consumer ist der Programmierer, der das Guidance Package für die Umsetzung seiner konkreten Lösung verwendet. Der Guidance Consumer kann dabei Wizards und Aktionen verwenden, die durch das Guidance Package angeboten werden. Durch die verschiedenen Wizards und Aktionen kann wiederum automatisiert Code generiert werden, der in die Anwendung einfließt.




Zum Schluss wird die Gesamtanwendung vom Guidance Consumer wieder kompiliert und in Form eines Installationsprogrammes dem End User für die Verwendung zur Verfügung gestellt. Das Guidance Package, dass für die Software verwendet wurde, ist daher wirklich nur für den Guidance Consumer sichtbar, da im Hintergrund wiederum nur normale .NET Assemblies erzeugt werden, die ohne Einschränkungen verwendet werden können.




Das Guidance Automation Toolkit bietet aber viel mehr an als ein vereinfachtes Wizard-Framework für das Visual Studio 2005. Der große Vorteil von Guidance Packages ist auch, dass sich diese dem Kontext des Programmierers anpassen. Wenn Sie heute zB. eine Erweiterung für das Visual Studio schreiben, mit Sie dem Programmierer die Möglichkeit bieten, eine neue Codedatei mit einem entsprechenden Grundgerüst zu einem Projekt hinzuzufügen, dann kann diese Codevorlage in jedem Projekttyp verwendet werden, ganz egal ob es sich dabei um eine Datenzugriffskomponente oder um eine WinForms-Anwendung handelt.




Aber vielleicht wollen Sie ja, dass nur die Codevorlage in einer Datenzugriffskomponente verwendet wird? Mit GAT ist das kein Problem, weil Sie als Guidance Author ganz genau den Kontext definieren können, in dem ein Wizard oder eine Aktion eines Guidance Packages verwendet werden darf.





GAT Konzepte





Das Guidance Automation Toolkit besteht aus 3 wichtigen Konzepten, die vom Guidance Author verstanden werden müssen, damit das gesamte Leistungsspektrum von GAT sinnvoll verwendet werden kann:





 







·
         


Guidance Packages






·
         


Visual Studio Templates






·
         


Recipes





 





Unter dem Guidance Package versteht man die Gesamtlösung, die der Guidance Author dem Guidance Consumer zur Verfügung stellt. Das Guidance Package kann nun aus verschiedenen sogenannten Visual Studio Templates bestehen. Diese Templates werden komplett in XML beschrieben und werden vom Visual Studio 2005 dazu verwendet, um Solutions oder Projektstrukturen innerhalb vom Visual Studio anzulegen.





 













 





Jedes dieser Visual Studio Templates kann wiederum aus verschiedenen Recipes bestehen. Unter einer Recipe können Sie sich eine Reihe von Aktivitäten eines Programmierers vorstellen, die durch GAT automatisiert ausgeführt werden. Komplexere Recipes können auch Input- und Output-Parameter verwenden. Das Erfassen der Input-Parameter kann zB. durch Wizards erledigt werden, die wiederum in Form von XML innerhalb von GAT beschrieben werden können.




Sehen wir uns nun die verschiedenen Konzepte ein wenig näher im Detail an. Schauen wir uns im ersten Schritt die Visual Studio Templates an, von denen 3 verschiedene Variationen unterstützt werden:





 







·
         


Solution Templates






·
         


Project Templates






·
         


Item Templates





 





Ein Solution Template wird immer dann angewendet, wenn durch GAT eine neue Solution oder ein neues Projekt innerhalb vom Visual Studio 2005 angelegt wird. Das Solution Template ist sozusagen der Startpunkt eines Guidance Packages.




Ein Project Template kann immer dann angewendet werden, wenn ein neues Projekt innerhalb einer Solution erzeugt wird. Ein solches Template wird daher immer dann angewendet, wenn Sie zu einer Solution ein neues Projekt hinzufügen.




Zum Schluss gibt es noch die Item Templates, die immer dann angewendet werden, wenn Sie ein neues Item, wie eine Datei zu einem Projekt hinzufügen. Mit dem Guidance Automation Toolkit haben Sie nun die Möglichkeit, dass Sie jedes dieser 3 Templates mit verschiedenen Recipes verknüpfen, die ausgeführt werden, wenn ein Template angewendet wird.




Wenn eine Recipe zB. Input-Parameter erwartet, kann dafür ein Wizard definiert werden, der die verschiedenen Parameter vom Guidance Consumer abfragt. Solche Wizards können wiederum komplett in XML definiert werden. Weiters haben Sie auch die Möglichkeit, dass Sie eigene User-Controls für den Wizard verwenden können, wenn die Standardmittel für Ihre Anforderungen nicht mehr ausreichen.




Eine Recipe kann weiters auch ein sogenanntes T3 Template (Text Template Transformation) anbieten. Mit Hilfe eines T3 Templates haben Sie die Möglichkeit, dass Sie Quelltext innerhalb einer Recipe erstellen können. Dabei definieren Sie die Struktur des Quelltextes in Form von XML und haben auch die Möglichkeit, dass Sie auf die verschiedenen Parameter zugreifen können, die von der Recipe definiert wurden.





Erstellen eines Guidance Packages





Nachdem Sie nun mit den grundlegenden Konzepten von GAT vertraut sind, möchte ich nun darauf näher eingehen, wie Sie mit Hilfe von GAT ein solches Guidance Package erstellen und verwenden können. Der große Vorteil ist hier, dass sich GAT wiederum komplett in das Visual Studio 2005 integriert und daher ein eigenes Projekt-Template anbietet, mit dem die Grundstruktur eines Guidance Packages erstellt werden kann. Wenn Sie ein neues Guidance Package innerhalb vom Visual Studio 2005 anlegen möchten, müssen Sie dazu auf den Knoten Guidance Packages wechseln, so wie in der folgenden Grafik dargestellt.





 













 





Sobald Sie dann das neue Projekt anlegen, wird ein Wizard gestartet, der von Ihnen ein paar Parameter für die Erzeugung des neuen Guidance Packages entgegennimmt:





 







·
         



Package Name: Name des neuen Guidance Packages






·
         



Package Caption: die Überschrift des neuen Packages






·
         



Package Description: eine Beschreibung für das Package






·
         



Package Namespace: der Namespace, der innerhalb des Packages verwendet wird






·
         



Author: Name des Guidance Authors





 













 





Sobald Sie diese Parameter eingegeben haben, können Sie auf Ok klicken, und das neue Guidance Package Projekt wird innerhalb vom Visual Studio 2005 angelegt und geöffnet. Wenn Sie sich die erzeugte Solution näher ansehen, werden Sie 3 verschiedene Projekte vorfinden:





 







·
         



GuidancePackage1: das eigentliche Guidance Package






·
         



GuidancePackage1Installer: eine Installer-Klasse für das neue Package






·
         



GuidancePackage2Setup: ein Setup-Projekt, das eine MSI-Datei aus dem Guidance Package erzeugt





 













 





Das eigentliche Guidance-Package Projekt besteht wiederum aus einer Vielzahl von verschiedenen Ordnern, die das Guidance Package näher beschreiben:





 












Ordner










Beschreibung











Actions








Beinhaltet die verschiedenen Aktionen des Guidance Packages










Converters








Beinhaltet Klassen, die von Recipes und Wizards dazu verwendet werden, um Parameter die vom Guidance Consumer eingegeben werden, zu konvertieren.










CustomWizardPages








Beinhaltet User-Controls, die innerhalb von Wizards verwendet werden können.










Editors








Beinhaltet User-Controls die für die Werteeingabe innerhalb von Wizards verwendet werden können.










References








Beinhaltet Logik-Klasen, die bestimmen, ob ein Template oder ein Recipe innerhalb eines Solution-Elementes angezeigt werden. (implementiert die kontextabhängige Logik)










Templates








Beinhaltet andere Ordner, die Projekte, Solutions, Items oder T3 Code darstellen.










ValueProviders








Beinhaltet Klassen, die von Recipes verwendet werden, um Werte zu berechnen, die als Argumente an Aktionen weitergegeben werden.











 





Die Projekt- und Ordner-Struktur, die hier durch das Visual Studio 2005 generiert wurde, wurde im Prinzip ebenfalls durch ein Guidance Package implementiert, damit jedes neue Guidance Package nach einem gewissen Regelwerk und nicht willkürlich implementiert wird.




Sehen wir uns nun die verschiedenen Dateien ein wenig näher an, aus denen unser neues Guidance Package besteht. Wie bereits weiter vorne erwähnt, ist das Solution Template der Eintrittspunkt in unser Guidance Package. Dieses Solution Template ist in der Datei SampleSolution.vstemplate im Ordner Templates/Solutions näher beschrieben. Wenn Sie die Datei im Visual Studio 2005 öffnen, werden Sie eine XML-Datei vorfinden, die die Struktur des Guidance Packages näher beschreibt.




Im XML-Knoten werden die verschiedenen Eigenschaften des Guidance Packages näher beschrieben:






Listing 1: Der Knoten




















  





















  







      GuidancePackage3 Sample







      Solution







  







  







      GuidancePackage3 Sample







      Solution







  







  







      CSharp







  







   90







  







      SampleSolution.ico







  







  







      false







  







  







      GuidancePackage3Solution







  







  






      true





  














  










 





Dabei handelt es sich um die verschiedenen Eigenschaften, die beim Erstellen des neuen Guidance Packages angezeigt werden. Um das zu demonstrieren, brauchen Sie das Guidance Package nur zu kompilieren und anschließend eine neue Instanz von Visual Studio 2005 öffnen. Wenn Sie anschließend ein neues Projekt anlegen möchten, können Sie nun ebenfalls das neu erstelte Guidance Package auswählen:





 













 





Wenn Sie sich das Solution Template näher ansehen, gibt es dort ebenfalls den Knoten . Über diesen Knoten wird definiert, welche Recipes von diesem Solution Template angeboten werden:






Listing 2: Der Knoten




















  





















  






      xmlns=“...“







      SchemaVersion=“1.0“







      Recipe=“CreateSolution“>







     







        






         Name=“HelloWorldRecipe“







         Target=“\SampleFolder“







         />







        






         Name=“CustomWizardPage“







         Target=“\SampleFolder“







         />







        






         Name=“Projects\







         ClientApplication\







         ClientApplication.







         vstemplate“







         Target=“\SampleFolder“







         />







     







  






















  












 



Das wichtigste Attribut dabei ist Recipe im Knoten . Denn über dieses Attribut wird definiert, welche Recipe ausgeführt wird, wenn das Guidance Package durch den Guidance Consumer geöffnet wird. Um die Definition der Recipe CreateSolution anzusehen, wechseln Sie bitte in die Datei GuidancePackage1.xml, die sich im Hauptverzeichnis des Guidance Packages Projekt befindet.


Wenn Sie sich diese XML-Datei näher ansehen, werden Sie sehen, dass hier ausschließlich Recipes definiert sind, die in den verschiedenen Templates verwendet werden. Jede der definierten Recipes besteht dabei aus den folgenden wichtigen XML-Knoten:



 








·         









·         









·         













 

Über den Knoten werden die verschiedenen Input- und Output-Parameter defininert, die von der Recipe verwendet werden. Diese Argumente können dann auch in T3 Templates bei der Code-Generierung referenziert und verwendet werden.


Wenn Sie für Ihre Recipe einen Wizard definieren möchten, können Sie das über den Knoten erledigen. Dieser Knoten beinhaltet das Element , das den Assistenten darstellt. Jede Seite dieses Assisenten wird über den Knoten

näher beschrieben, der sich innerhalb des

Knoten befinet. Wenn Sie für die Recipe Parameter definiert haben, können Sie beim Attribut ValueName direkt den Namen des Parameters eintragen. Somit haben Sie die Möglichkeit den Paramter direkt über den Wizard erfassen zu lassen.



Listing 3: Ein typischer Assistent















 
 
SchemaVersion=“1.0“>





 
 





     





      My Title





  
   





     




      ValueName=“MyParamter“ />





     




     



  









 








 







Der wichtigste Knoten innerhalb einer Recipe ist der Knoten . Dieser Knoten definiert, welche Aktionen für diese Recipe ausgeführt werden. Dabei können die Actions wiederum auf die verschiedenen Parameter zugreifen, die zB. mit Hilfe eines Wizards erfasst wurden. Bei der Recipe CreateSolution sehen Sie zB. das die Action NoOp ausgeführt wird, die sozusagen keine weitere Aktion ausführt.






Jede Aktion, die Sie hier eintragen, muss eine Klasse sein, die von der Basisklasse Action ableitet. Daher müssen die beiden Methoden Execute und Undo überschrieben werden. Wenn Sie also eine MessageBox mit „Hello World“ beim Erzeugen der Solution ausgeben möchten, brauchen Sie diesen Methodenaufruf nur in der Methode Execute der Klasse DoNothingAction einfügen– einfach oder?






Schauen wir jetzt zurück zur Datei SampleSolution.vstemplate. Wie Sie noch aus Listnig 2 wissen, sind hier noch weitere Referenzen zu Recipes definiert. Dazu wird das XML-Element verwendet. Über das Attribut Name können Sie wiederum den Namen der Recipe angeben, die aufgerufen werden soll. Zusätzlich wird über das Attribut Target bestimmt, in welchem Kontext die Recipe zur Verfügung steht. Wie Sie anhand des Listings erkennen können, stehen diese Recipes nur für den Ordner SampleFolder zur Verfügung, der während der Erstellung des Guidance Packages angelegt wurde.






Zusätzlich kann neben anderen Recipes auch ein komplett anderes Solution Template referenziert werden. Dazu wird das XML-Element verwendet, wo wiederum der Name der .vstemplate Datei und das Target angegeben werden muss.






Wenn Sie jetzt zB. in der neu angelegten Solution die auf dem Guidance Package basiert, mit der rechten Maustaste auf den Ordner SampleFolder klicken, sehen Sie die verschiedenen Recipes die Ihnen angeboten werden. Weiters haben Sie auch die Möglichkeit, dass Sie Recipes in das Menü bzw. auch in die Toolbar von Visual Studio 2005 integrieren.






Eine weitere wichtige Action, die ich nun noch ein wenig näher vorstellen möchte ist die Aktion T3Action, über die Codegenerierung auf der Basis eines T3 Templates vorgenommen wird. Die Verwendung dieser Action finden Sie zB. bei der Recipe GenerateRepeatingClass. Das wichtigste Attribut dieser Action ist Template, über das Sie das T3 Template angeben können, das als Basis für die Codegenerierung dienen soll. Das nächste Listing zeigt ein typisches T3 Template.






Listing 4: T3 Template






<#@ Template Language=“C#“ #/>






<#@ Using Namespace=“System“ #/>







 







using System;






using System.Text;







 







namespace =






<#=







   svc.GetValue







   („TargetNamespace“)






#/>






{







   class =







   <#= svc.GetValue(„ClassName“)







   #/>







   {







      static void Main()







      {







         Console.WriteLine(„







         <#= svc.GetValue(







         „Hello“) #/>







        
Console.ReadLine();





      }





   }




}






 







Die wichtigste Methode aus diesem T3 Template ist dabei svc.GetValue(), mit der Parameter von der Recipe angefordert und in den generierten Code aufgenommen werden können. Hierbei haben Sie jetzt die Möglichkeit Parameter für eine Recipe zu definieren, diese anschließend über einen Wizard erfassen zu lassen und anschließend ein T3 Template auszuführen, das diese Parameter verwendet.






Wenn Sie den XML-Knoten

der Recipe ansehen, werden Sie sehen, dass jeder Parameter, der innerhalb des T3 Templates verwendet wurde, hier definiert ist.






Eine weitere Möglichkeit die das Guidance Automation Toolkit zur Verfügung stellt, ist der Guidance Package Manager der über den Menüpunkt Tools/Guidance Package Manager aufgerufen werden kann. Hier werden anschließend in einem Dialog alle Solution Templates und Recipes aufgelistet, die im aktuell verwendeten Guidance Package zur Verfügung stehen. Dadurch brauchen Sie nicht alle Kontextmenüs durchsuchen, sondern können die verschiedenen Recipes mit einem Mausklick ansehen, die im Guidance Package zur Verfügung stehen.







 


















Fazit






Die Entwickung von Addins, Wizards und benutzerdefinierten Projekttypen für das Visual Studio war immer eine harte Angelegenheit, und Sie mussten sich auch immer mit den internen Details vom Visual Studio herumschlagen. Aber mit dem Guidance Automation Toolkit ist es nun Microsoft anscheinend wirklich gelungen, diese Erweiterungsmöglichkeiten in einem einfach zu bedienenden Framework zu integrieren, das auch sehr schnell erlernbar ist.






Mit Hilfe von Guidance Packags haben Sie nun die Möglichkeit wiederkehrende Tasks innerhalb des Visual Studio 2005 zu automatisieren und auch zu professionalisieren. Weiters haben Sie auch die Möglichkeit Referenzarchitekturen durch die Verwendung von Guidance Packages abzubilden, und somit die Softwareentwicklung in Ihrem Unternehmen ein wenig zu standardisieren. Der Ansatz der durch das Guidance Automation Toolkit gewählt wird, bildet neben den DSL-Tools (Domain Specific Languages) die Grundlage für Software-Factories.






Microsoft bietet ja selbst bereits eine große Vielzahl von Application Blocks und Referenzarchitekturen an. Microsoft wird daher nun auch versuchen all diese Application Blocks und unter anderem auch die Enterprise Library um Guidance Packages zu erweitern, die Ihnen die Verwendung einfacher machen. So sollten Sie dann irgendwann die Möglichkeit haben, wenn Sie ein Web Service aufrufen, über einen Wizard festzulegen, dass Sie die Smart Client Offline Application Block dazu verwenden möchten, oder dass Sie Security-Features aus der WSE bzw. aus WCF nutzen möchten.






Ich muss schon sagen, das sind attraktive Zukunftsaussichten – aber bilden Sie sich selbst Ihr Urteil.







 







[1] GAT Community: http://guidanceautomation.net






[2] GAT: http://lab.msdn.microsoft.com/teamsystem/workshop/gat/intro.aspx






[3] Software Factories:  http://msdn.microsoft.com/vstudio/teamsystem/workshop/sf/default.aspx






[4] DSL Tools: http://msdn.microsoft.com/vstudio/teamsystem/workshop/DSLTools/default.aspx






[5]: TechEd 2005 GAT Hand-On-Labs: http://clariusconsulting.net/blogs/kzu/archive/2005/06/30/GATHoL.aspx







 





/RecipeReference
/Template


Das könnte Sie auch interessieren