上下文
有时我想在标准的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编译器设置。我怎样才能完成这项任务?
答案 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。