如何在.csproj C#项目中编译('build')所有TypeScript文件?

时间:2018-06-14 08:04:53

标签: typescript msbuild visual-studio-2017

上下文

有时我想在标准的VS 2017 .NET框架C#项目(.csproj)中构建/重新编译所有TypeScript文件而不构建dll等。即使是控制台命令行解决方案,我也会很高兴。

到目前为止我做了什么:

我可以使用MSBuild编译所有内容:c:\>msbuild.exe my.csproj。我甚至发现已安装的nuget包Microsoft.TypeScript.MSBuild.2.7.2包含在我的.csproj中并且定义了CompileTypeScript目标,但不幸的是c:\>msbuild.exe my.csproj -t:CompileTypeScript返回0错误,0警告并且什么都不做。 (据说在错误的地方查找ts文件并找不到)注意:引用一个不存在的目标会给出一条信息性的错误消息,因此肯定会找到目标。

问题

无论MSBuild的想法是什么,我想编译.csproj项目中的所有TypeScript文件,并使用相同的TypeScript编译器设置。我怎样才能完成这项任务?

2 个答案:

答案 0 :(得分:2)

创建一个使用EXEC任务的新MsBuild目标,并告诉它执行tsc(TypeScript编译器)。 tsc需要您传递tsconfig.json文件,以便知道在哪里找到以及放置输出文件的位置。

所以你将拥有以下内容:

<Target Name="TypeScriptCompiler">   
    <Exec Command="tsc [path to your tsconfig.json file]"/>  
</Target> 

请注意,tsc编译器应该在您的PATH环境变量中。

答案 1 :(得分:1)

以下命令对我有用:

msbuild YourProject.csproj -t:CompileTypeScript -p:BuildingProject=true

Microsoft.TypeScript.targets中的“ CompileTypeScript”任务上存在“ BuildingProject”条件:

<Target Name="CompileTypeScript" Condition="'$(BuildingProject)' != 'false'" DependsOnTargets="$(CompileTypeScriptDependsOn)" Inputs="@(TypeScriptCompile)" Outputs="@(GeneratedJavascript)">

从本质上讲,我不得不欺骗目标,以为该项目确实在构建中,以便可以通过条件并执行。

我应该注意,我正在使用TS 1.6,因此这可能不适用于2.7.2。