我有一个T4模板,可以生成一些我希望包含在TypeScript版本中的.d.ts文件。当TypeScript编译器实际上作为构建的一部分(或从.ts文件保存)运行时,我想要更好地理解,这样我就可以确保在TypeScript构建之前运行我的T4生成目标。
任何人都可以向我提供更多详细信息:
(如果重要,我使用的是VS2013 Update 3.)
答案 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部分