Bestimmen Lösung-Konfiguration (debug/release) beim ausführen einer T4-Vorlage
Ich habe einen T4-Vorlage ausgegeben werden können, entweder optimiert, die Inhalte oder die standard-content, basierend auf einer Flagge. Derzeit bin ich manuell die fahne wechseln, basierend auf meine Bedürfnisse.
Was ich gerne tun würde ist die Flagge basierend auf der Konfiguration der Lösung in Visual Studio. Wenn bauen im Debug-Modus, würde ich die Ausgabe der standard-content. Wenn bauen im Release-Modus, würde ich die Optimierung der Inhalte statt. Ich fand einen anderen T4 Frage, dass sieht vielversprechend aus: T4 Text Template - Ist es möglich, Zusammenstellung von Symbolen aus host?
Aber in meinem Fall würde ich wollen, etwas zu tun, wie die folgenden:
<#@ template language="C#" hostspecific="True"
compilerOptions="/d:$(ConfigurationName)" #>
Da kann ich verwenden $(SolutionDir) in eine assembly-Direktive:
<#@ assembly name="$(SolutionDir)\myreference.dll" #>
Ich würde denken, der /d:$(ConfigurationName) würde mich dort, wo ich gehen, und dann könnte ich Folgendes tun, um meine Flagge:
<#
#if Debug
optimize = false;
#else
optimize = true;
#endif
#>
Ach, das scheint nicht zu funktionieren. Ich habe auch versucht mit:
Host.ResolveParameterValue("-", "-", "ConfigurationName");
Ebenfalls ohne Erfolg. Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht eher ich Fragen, aber ich finde ein Ausschnitt an der Unterseite der in diesem MSDN-Artikel, das bekommt mir, wo ich sein muss. Die Antwort hier ist, verwenden Sie die IServiceProvider Schnittstelle verwenden, um die Visual Studio Tee. Hier ist code, der es getan (Entschuldigung im Voraus für die hart-codiert "Debug"):
UPDATE
Dieser code überprüft, um zu sehen, ob das aktive Projekt wird die aktuelle Konfiguration der Optimierungen eingeschaltet. Es hat immer noch eine hart-codierte name der Eigenschaft, aber eine, die viel weniger wahrscheinlich zu ändern. Darüber hinaus ist mit dem Projekt Optimierung Flagge macht eine Menge Sinn für mein Szenario (versuchen zu entscheiden, wenn ich die eingeschaltet werden sollten, Optimierungen in meinem eigenen code):
Für Menschen, die versuchen, diese Arbeit zu erhalten, die zur design-Zeit (Datei speichern) sowie zur build-Zeit (F5/F6), zwei Methoden sind notwendig.
Emil beschreibt die design-time-Methode. Zur build-Zeit, müssen Sie zunächst angeben, ein T4-parameter in Ihrem Projekt-Datei:
Dann haben Sie die Referenz an der Spitze von Ihr .tt:
Und dann schauen, für welche von Ihnen passiert zu sein:
Ist es notwendig, neben der Logik für beide, wenn Sie möchten, dass Ihre Vorlage zu arbeiten, in beiden Szenarien. Die design-time-Methode funktioniert nicht mit dem build-Zeit (die DTE-Host ist nicht etwa die Lösung), und die build-time-Methode funktioniert nicht bei design-Zeit (MSBuild ist nicht rund um die parameter).
Wenn Sie versuchen, dies in einem VS2017 ASP.Net Core Projekt dann folgende ist eine Lösung, die für mich gearbeitet, mit highlights aus meinem post hier.
Diese MSDN-blog von Jeremy Kuhne und diese blog von Thomas Levesque und mehrere andere links wie diese MSDN-doc geholfen, um es in VS2017.
Ich nicht haben, um etwas an den Anfang der .csproj-Datei, da VS2017 hat die Dateien bereits standardmäßig enthalten.
Landete ich mit den folgenden .csproj änderungen am Ende der Datei:
Diese in die T4-Vorlage:
Die folgenden Einstellungen für die Eigenschaft auf .tt-Datei: