2014-10-15 11 views
6

Ich habe eine T4-Vorlage, die eine Handvoll .d.ts-Dateien generiert, die ich in meinem TypeScript-Build einschließen möchte. Ich möchte besser verstehen, wenn der TypeScript-Compiler tatsächlich als Teil eines Builds (oder aus einer .ts-Datei) ausgeführt wird, so dass ich sicher sein kann, dass mein T4-Generierungsziel vor dem TypeScript-Build ausgeführt wird.MSBuild TypeScript Kompilierziele

Kann jemand geben Sie mir weitere Details:

  1. Wenn CompileTypeScript Ziel tatsächlich läuft?
  2. Was macht das PreComputeCompileTypeScript-Ziel eigentlich?
  3. Gibt es eine vorgeschlagene Möglichkeit, sicherzustellen, dass ein MSBuild-Ziel vor dem Build TypeScript ausgeführt wird?

(Falls es wichtig ist, ich bin mit VS2013 Update 3)

+0

Ist die unten Antwort beantwortet Ihre Frage oder möchten Sie zusätzliche Informationen? –

Antwort

7

1.When CompileTypeScript Ziel läuft eigentlich?

CompileTypeScript wird zur Liste CompileDependsOn hinzugefügt, diese Liste ist hier definiert: "C: \ Programme (x86) \ MSBuild \ 12.0 \ Bin \ Microsoft.Common.CurrentVersion.targets". Das Standardziel (normalerweise Build) hängt von CoreBuild ab, das wiederum die Ausführung des Kompilierziels erfordert, siehe Zielkompilierung (Zeile 2762) und Zielcorebuild (Zeile 703).

Wenn also das Ziel erstellt wird, wird der TypeScript-Build ausgeführt, da für die Ausführung BeforeBuild, CoreBuild und AfterBuild ausgeführt werden müssen. Das CoreBuild-Ziel erfordert viele Ziele einschließlich kompilieren und TypeScipt hinzugefügt sich selbst in der Datei Microsoft.TypeScript.targets ("C: \ Programme (x86) \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ TypeScript \ Microsoft.TypeScript.targets "). Siehe:

<PropertyGroup> 
    <CompileDependsOn> 
     CompileTypeScript; 
     $(CompileDependsOn); 
    </CompileDependsOn> 
</PropertyGroup> 

2.What PreComputeCompileTypeScript Ziel ist tatsächlich tun?

Es wird versucht, den am häufigsten verwendeten Pfad für die Option outDir zu finden, wenn sie verwendet wird. Wenn keine TypeScript-Dateien vorhanden sind, ist diese Aufgabe die, die den Fehler gibt: Keine Dateien zu kompilieren (oder etwas). Wenn einzelne Ausgabe (der Parameter --out) spezifiziert ist Es tut verschiedene Dinge. Es sieht aus wie VS VS bietet vollständige Pfade zum Compiler und diese Aufgabe macht sie relativ, wenn möglich (ich weiß nicht den Grund dafür aber).

3. Gibt es einen Vorschlag, um sicherzustellen, dass ein MSBuild-Ziel vor dem Build von TypeScript ausgeführt wird?

Wenn Sie eine eigene Msbuild-Aufgabe erstellen, können Sie das Ziel compileDependsOn ändern. Sie sollten dies tun, nachdem Sie die Microsoft.TypeScript.targets importiert haben. Sie können es wie folgt ändern:

<PropertyGroup> 
    <CompileDependsOn> 
     CompileYourTarget; 
     $(CompileDependsOn); 
    </CompileDependsOn> 
</PropertyGroup> 

edit: ich Teil 2 der Antwort ändert