Parameter – Text Templates (T4) mit den Klassen des Visual Studio Automation Model (EnvDTE) verwenden.
Nachdem ich schon Probleme damit hatte, eigene Objekte an einem parametrisierten Text Template zu übergeben, da bedingt durch die zufällig erzeugten AppDomains Grundvoraussetzungen erfüllt sein müssen, hing ich jetzt kurzzeitig bei den Klassen aus dem EnvDTE - Namensraum fest.
Meine Vorlage hat folgenden Aufbau:
Für den Parameter RepositoryClass habe ich als Typ EnvDTE.CodeClass definiert, damit ich mit diesen Angaben aus dem File Code Model bspw. die Service-Implementierung erstellen kann.
Beim ersten Aufruf begrüsste mich jedoch folgende Fehlermeldung:
Error 1 Running transformation: The type 'EnvDTE.CodeClass' of the parameter 'RepositoryClass' did not match the type of the data passed to the template.
Der erste Gedanke, wow schon mal keine Serialisierungsausnahme, aber warum wird der Typ nicht erkannt? Der zweite Gedanke, aja ist ja COM und der Klassen- bzw. Schnittstellentyp entspricht in diesem Fall nicht dem Typ EnvDTE.CodeClass während der Übertragung zwischen den AppDomains.
Also war der nächste Versuch den Parametertyp durch System.Object und im Statement-Block der Textvorlage den Parameter gecastet einer Hilfsvariable zu übergeben. Der Vorteil dieser Variante: Im Gegensatz zum Parameter funktioniert mit der Hilfsvariable die Intellisense mit dem Tangible T4-Editor. ;-)
Erneuter Versuch und es funktioniert. Nun werden in meinem Beispiel für alle öffentlichen Methoden eines Repositories die passenden Serviceimplementierungen erzeugt.

- Abbildung 3 Generierter Code mit Hilfe des VS FileCodeModel
- 0 Kommentar(e)




Mein Kommentar