2016-03-31 5 views
2

Die Frage ist: Gibt es eine Möglichkeit, eine Einstellung in der * .tt Datei zu haben, so dass die generierten Dateien auf eine bestimmte Build Action gesetzt werden?Wie setze ich Build Action für generierte Dateien von einem T4?

Die Sache ist, ich erzeuge SQL-Skript mit einer Vorlage. Ich verwende dieses Skript als vorbereitendes Skript im Datenbankprojekt. Derzeit muss ich die Build-Aktion bei jeder Neugenerierung der Datei manuell auf "Pre-Deploy" setzen - ich möchte sie automatisieren.

Beide Dateien - Vorlage und SQL, die es generiert - sind im Projekt enthalten. Im Projekt (* .sqlproj) sind sie als nächstes tags:

<PreDeploy Include="Migration\PreDeployScript.sql"> 
    <DependentUpon>Migration\PreDeployScript.tt</DependentUpon> 
</PreDeploy> 

und

<None Include="Migration\PreDeployScript.tt"> 
    <Generator>TextTemplatingFileGenerator</Generator> 
</None> 

Wenn ich Custom Tool ausführen, um neu zu generieren SQL (Ich brauche es sehr oft zu tun), dann predeploy Das Tag wird entfernt und das Build-Tag wird an seinen Platz gesetzt. Gefällt mir:

<Build Include="Migration\PreDeployScript.sql"> 
    <DependentUpon>Migration\PreDeployScript.tt</DependentUpon> 
</Build> 

Es bricht das Projekt und ich muss manuell Build zu PreDeploy ändern.

Kann etwas in der Template-Datei angeben, um die Build-Aktion beizubehalten PreDeploy die ganze Zeit?

Vielen Dank!

+0

Im Zusammenhang mit http://stackoverflow.com/questions/30038839/generated-by-t4-file-build-action-gets-reset-to-build – debater

Antwort

0

Sie könnten eine Artikelgruppe mit einem Platzhalter verwenden. Dadurch wird Visual Studio automatisch jede Datei auf der Festplatte relativ zum Projekt einschließen, die dem Platzhaltermuster entspricht.

Dies wird nur funktionieren (dh die Dateien werden nur angezeigt, wenn Sie Ihr Projekt laden), wenn sie bereits auf der Festplatte vorhanden sind.

wird dieses Muster, um alle Dateien mit einem g.sql Suffix enthalten

<ItemGroup> 
    <Build Include="*\*.g.sql" /> 
</ItemGroup> 

Leider Visual Studio mag diese Platzhalter zu erweitern, wenn Sie das Projekt, speichern, die sie effektiv entfernt. Der beste Weg, um dieses Problem zu beheben, ist die Indirektion.

Erstellen Sie eine neue MSBuild-Projektdatei mit nur der Elementgruppe und importieren Sie die neue Projektdatei mit dem Element <Import> in Ihr SSDT-Projekt. Der Inhalt der enthaltenen Datei wird in Ihrem primären SSDT-Projekt zusammengeführt.

+0

Danke für Ihre Antwort, aber es hat nicht geholfen. Ich habe die Frage aktualisiert. Wenn ich das PreDeploy-Tag in eine andere Projektdatei verschoben habe, habe ich es mit Wildcards geändert. Aber nach der Neugenerierung von SQL mit TT-Datei fügt es immer noch dieses falsche Build-Tag hinzu, das ich in Frage erwähnte. – krus

Verwandte Themen