MSBuild TypeScript编译目标

时间:2014-10-15 13:17:30

标签: msbuild typescript

我有一个T4模板,可以生成一些我希望包含在TypeScript版本中的.d.ts文件。当TypeScript编译器实际上作为构建的一部分(或从.ts文件保存)运行时,我想要更好地理解,这样我就可以确保在TypeScript构建之前运行我的T4生成目标。

任何人都可以向我提供更多详细信息:

  1. 当CompileTypeScript目标实际运行时?
  2. PreComputeCompileTypeScript目标实际上在做什么?
  3. 是否有建议的方法来确保在TypeScript构建之前运行MSBuild目标?
  4. (如果重要,我使用的是VS2013 Update 3.)

1 个答案:

答案 0 :(得分:7)

1.当CompileTypeScript目标实际运行时?

CompileTypeScript被添加到CompileDependsOn列表中,此列表在此处定义:" C:\ Program Files(x86)\ MSBuild \ 12.0 \ Bin \ Microsoft.Common.CurrentVersion.targets"。默认目标(通常构建)取决于CoreBuild,而CoreBuild又需要执行Compile目标,请参阅目标编译(第2762行)和目标corebuild(第703行)。

因此,当构建目标时,它会执行TypeScript构建,因为构建需要运行BeforeBuild,CoreBuild和AfterBuild。 CoreBuild目标需要很多目标,包括在Microsoft.TypeScript.targets文件中添加自己的编译和TypeScipt(" C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ TypeScript \ Microsoft)。 TypeScript.targets&#34)。 参见:

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

2. PreComputeCompileTypeScript目标实际上在做什么?

它尝试在使用时找到outDir选项的最常用路径。此外,当没有TypeScript文件时,此任务是给出错误的任务:没有要编译的文件(或其他东西)。 当单输出(--out参数)是特定的时它会做不同的事情。 看起来很像VS正在为编译器提供完整的路径,这个任务在可能的情况下使它们变得相对(我不知道原因)。

3.是否有建议的方法来确保在TypeScript构建之前运行MSBuild目标?

创建自己的msbuild任务时,可以修改compileDependsOn目标。您应该在导入Microsoft.TypeScript.targets后执行此操作。您可以这样更改:

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

编辑:我更改了答案的第2部分