2009-10-28 6 views
5

Ich erzeuge ziemlich viel Code aus einer einzigen XML-Datei, aber die Vorlagen sind in zwei verschiedenen T4-Vorlagen organisiert. Immer wenn ich die XML-Datei ändere, muss ich daran denken, die zwei *.tt Dateien zu öffnen, sie trivial zu ändern (ein Leerzeichen hinzufügen/löschen) und sie erneut zu speichern, um sicherzustellen, dass der Code generiert wird.Wie erzwingen Sie Visual Studio 2008, Code aus T4-Vorlagen neu zu generieren, wenn sich eine XML-Datei ändert?

Dies kann nicht der richtige Weg sein!

Idealerweise möchte ich, dass Visual Studio 2008 einen Texttransformer für die T4-Dateien ausführt, wenn sich die XML-Datei geändert hat. Ich bin ein bisschen verloren, da ich nicht wirklich weiß, wie Visual Studio C# -Projekte erstellt, also wären Zeiger in dieser Richtung auch hilfreich (ich könnte dann versuchen, es selbst herauszufinden).

+0

BTW: Ich habe herausgefunden, dass Visual Studio C# -Projekte erstellt: MSBuild. Die Projektdatei selbst (* .csproj) ist eine MSBuild-Datei, die einem Makefile ähnelt. Eine Lösung könnte also sein, die * .tt-Dateien beim Erstellen der XML-Datei zu berühren ... Ich werde Sie auf dem Laufenden halten. –

Antwort

2

Sie können T4ScriptFileGenerator von T4Toolbox als ein benutzerdefiniertes Tool für Ihre XML-Datei verwenden. Angenommen, Sie haben die Test.XML-Datei in Ihrem Projekt mit diesem benutzerdefinierten Tool. Beim ersten Speichern von Test.XML erstellt dieses benutzerdefinierte Tool eine neue Test.tt-Datei. Sie können Ihre Codegenerierungslogik dort platzieren (in Position, oder # enthalten Ihre anderen .tt-Dateien). Das nächste Mal, wenn Sie Test.XML speichern, wird der vorhandene Test.tt transformiert (Code wird generiert).

2

Ich denke, ich könnte hier endlich eine Lösung gefunden haben. Ich bin auf die Idee gekommen, wie XAML-Dateien in der Projektdatei für C# -Projekte erwähnt werden.

Lassen Sie uns eine Datei A.tt und B.tt übernehmen, die Daten von C.xml verwenden, und wir möchten den Code, wenn C.xml Änderungen regenerieren.

Bearbeiten Sie die Projektdatei. Ihre Definitionen für A.tt und B.tt sollte wie folgt aussehen:

<ItemGroup> 
    <None Include="A.tt"> 
     <Generator>TextTemplatingFileGenerator</Generator> 
     <LastGenOutput>A.cs</LastGenOutput> 
     <DependentUpon>C.xml</DependentUpon> 
    </None> 
    <None Include="B.tt"> 
     <Generator>TextTemplatingFileGenerator</Generator> 
     <LastGenOutput>B.cs</LastGenOutput> 
     <DependentUpon>C.xml</DependentUpon> 
    </None> 
</ItemGroup> 

Des Weiteren benötigen Sie (natürlich ...)

<ItemGroup> 
    <None Include="C.xml" /> 
</ItemGroup> 

Und auch die Anweisung automatisch generieren A.cs und B.cs:

Ich glaube, das meiste davon wird bereits für Sie erledigt, wenn Sie die Vorlagendatei erstellen, also alles, was Sie wirklich anzeigen müssen d ist die <DependentUpon>C.xml</DependentUpon> Teile zu den ItemGroup s für A.tt und B.tt.

+1

Es wäre sehr sinnvoll, wenn dies korrekt wäre. Leider ist es nicht :(- DependentUpon wird anscheinend nur für Präsentationszwecke in der Projektbaumansicht verwendet. – Ibmurai

+0

@Ibmurai, ja, das habe ich auch gefunden ... ich hatte einfach keinen eindeutigen Beweis und bin einfach weitergegangen. Danke zum Hinweis! –

+0

Ich glaube nicht, dass das funktioniert. – Slion