我有一个使用 TypeScript 的 Web 项目,它对编译的输出文件有一些相当复杂的要求。因此,例如,我需要将一个目录中的所有 *.ts 文件编译成一个 .js 文件,并将另一个目录中的所有 *.ts 文件编译成一个不同的 .js 文件。(它比这更复杂,但你明白了。)
我已经能够使用 tsc.exe 命令行,使用输入文件和其他东西来完成这项工作,但我希望能够使用 MSBuild .targets 文件 - 除其他外,使用来自的 tsc.exe命令行在持续集成服务器上的支持似乎很差,它可以位于谁知道在哪里,当然不太可能在路径中。
根据这里的答案,似乎我应该能够使用自定义构建目标来做到这一点。因此,我创建了 Microsoft.TypeScript.targets 的自定义版本,除了默认的“CompileTypeScript”目标之外,我还创建了第二个目标“PayboardApiV10”,因此相关部分如下所示:
<Target Name="CompileTypeScript" Condition="'$(BuildingProject)' != 'false'">
<Message Text="Compiling TypeScript files normally" Importance="high"/>
<VsTsc
ToolPath="$(TscToolPath)"
ToolExe="$(TscToolExe)"
Configurations="$(TypeScriptBuildConfigurations)"
FullPathsToFiles="@(TypeScriptCompile)"
YieldDuringToolExecution="$(TscYieldDuringToolExecution)"
OutFile="$(TypeScriptOutFile)"
OutDir="$(TypeScriptOutDir)"
>
<Output TaskParameter="GeneratedJavascript" ItemName="GeneratedJavascript" />
</VsTsc>
</Target>
<Target Name="PayboardApiV10" Condition="'$(BuildingProject)' != 'false'">
<Message Text="Compiling TypeScript files for Payboard API v1.0" Importance="high" />
<VsTsc
ToolPath="$(TscToolPath)"
ToolExe="$(TscToolExe)"
Configurations="$(TypeScriptBuildConfigurations)"
FullPathsToFiles="@(TypeScriptCompile)"
YieldDuringToolExecution="$(TscYieldDuringToolExecution)"
OutFile="Payboard.js"
OutDir="$(ProjectDir)api\v1.0\"
>
<Output TaskParameter="GeneratedJavascript" ItemName="GeneratedJavascript" />
</VsTsc>
</Target>
然后我在我的项目配置中为我希望由“PayboardApiV10”构建目标获取的特定文件指定了一个“CustomTool”,如下所示:
我应该注意,我不知道我是否正确地做这件事。我似乎找不到任何关于它的文档,我能找到的唯一示例来自之前的答案。更重要的是,当我运行构建时,我项目中的所有TS 文件都会被第一个构建目标捕获,包括我为自定义工具指定“MSBuild:PayboardApiV10”的那些。“PayboardApiV10”工具似乎从未运行,即,我从未看到消息“Compiling TypeScript files for Payboard API v1.0”。
所以两个问题:
(1)有没有更好的方法来做我想做的事情?
(2)如果这通常是正确的方法,那么我做错了什么有什么想法吗?