Ich habe eine T4-Vorlage, die Klassen aus einer XML-Datei generiert.
Wie kann ich eine Abhängigkeit zwischen der xml-Datei und der Vorlagendatei hinzufügen, so dass die Schablone bei der Änderung der xml-Datei automatisch erneut ausgeführt wird, ohne im Kontextmenü "Eigenes Werkzeug ausführen" auszuwählen?
Ich glaube nicht, dass T4 die automatische Template-Transformation basierend auf einer externen Abhängigkeit unterstützt. Ich stimme Marc zu - wenn Sie nur eine externe Datei haben, können Sie ein benutzerdefiniertes "benutzerdefiniertes Tool" für Ihre XML-Datei erstellen oder einfach ttxgen verwenden . Ich glaube jedoch nicht, dass dieser Ansatz auf ein Szenario skaliert, in dem die t4-Vorlage von mehr als einer Datei abhängt. Möglicherweise müssen Sie ein Visual Studio-Paket erstellen, um damit umzugehen.
Wie lange dauert das Ausführen des Tools? Eine faule Option könnte darin bestehen, den csproj so zu bearbeiten, dass immer das Tool während des Builds ausführt (vermutlich über <Exec ... />
oder eine benutzerdefinierte targets
-Datei - das hängt natürlich davon ab, dass es schnell ausgeführt wird.
Ein anderer Weg wäre, ein Shim zu schreiben, das als "Custom Tool" in VS funktioniert und einfach die existierende exe (oder was auch immer) mit den richtigen Args aufruft. Nicht trivial, aber machbar ( siehe hier ) - ich glaube das soll dann angeblich ziemlich gut spielen mit Änderungserkennung. Es steht eigentlich auf meiner Liste der Dinge, die ich für ein aktuelles Projekt tun kann, also werde ich es bald herausfinden ...
Sie können AutoTT Visual Studio Extension verwenden.
Diese Erweiterung ermöglicht die Konfiguration von Triggern, die eine T4-Vorlage ausführen.
Einer der möglichen Auslöser ist ein Dateiwechsel. In der Beispielkonfigurationsdatei auf der AutoTT-Seite stimmt der reguläre Ausdruck für die Auslöser mit allen Dateien in den angegebenen Ordnern überein (Controller, Inhalt), Sie können ihn jedoch so ändern, dass er nur mit einer bestimmten Datei ausgeführt wird.
Chirpy ist eine weitere Option dafür. Und auch T4 Regenerator , was es auf eine andere Weise macht.