В моем MsBuild файлы TypeScript компилируются в JavasScript, но не копируются в папку публикации публикации.
Это происходит после того, как я начинаю использовать пакет Microsoft.TypeScript.MSBuild Nuget, поэтому мне не нужно ретранслировать определенную версию TypeScript, установленную на сервере сборки. Если в Visual Studio 2017 используется локально установленный TypeScript SDK, он работает должным образом.
Путем отладки информации журнала из выходных данных MsBuild я обнаружил, что разница заключается в том, что при сборке с Microsoft.TypeScript.MSBuild отсутствует эта запись:
Target "GetTypeScriptOutputForPublishing: (TargetId:148)" in file "C:\Program Files (x86)\Microsoft SDKs\TypeScript\3.1\build\Microsoft.TypeScript.targets" from project "C:\TestDev\WebTypeScript\WebTypeScript\WebTypeScript.csproj" (target "PipelineCollectFilesPhase" depends on it):
Task "AssignTargetPath" (TaskId:102)
Task Parameter:
Files=
app\default.js
DestinationRelativePath=app\default.js
app\default.js.map
DestinationRelativePath=app\default.js.map (TaskId:102)
Task Parameter:RootFolder=C:\TestDev\WebTypeScript\WebTypeScript (TaskId:102)
Output Item(s):
GeneratedJavascriptWithTargetPath=
app\default.js
DestinationRelativePath=app\default.js
OriginalItemSpec=app\default.js
TargetPath=app\default.js
app\default.js.map
DestinationRelativePath=app\default.js.map
OriginalItemSpec=app\default.js.map
TargetPath=app\default.js.map (TaskId:102)
Done executing task "AssignTargetPath". (TaskId:102)
Added Item(s):
FilesForPackagingFromProject=
app\default.js
Category=Run
DestinationRelativePath=app\default.js
Exclude=False
FromTarget=Unknown
OriginalItemSpec=app\default.js
ProjectFileType=Default
TargetPath=app\default.js
app\default.js.map
Category=Run
DestinationRelativePath=app\default.js.map
Exclude=False
FromTarget=Unknown
OriginalItemSpec=app\default.js.map
ProjectFileType=Default
TargetPath=app\default.js.map
Added Item(s):
ContentWithTargetPath=
app\default.js
DestinationRelativePath=app\default.js
OriginalItemSpec=app\default.js
TargetPath=app\default.js
app\default.js.map
DestinationRelativePath=app\default.js.map
OriginalItemSpec=app\default.js.map
TargetPath=app\default.js.map
Added Item(s):
Content=
app\default.js
DestinationRelativePath=app\default.js
app\default.js.map
DestinationRelativePath=app\default.js.map
Done building target "GetTypeScriptOutputForPublishing" in project "WebTypeScript.csproj".: (TargetId:148)
Как указано, «GetTypeScriptOutputForPublishing» зависит от PipelineCollectFilesPhase,
Таким образом, представляется, что в одном случае PipelineCollectFilesPhase зависит от GetTypeScriptOutputForPublishing, а выходные данные компилятора TypeScript копируются в выходной каталог публикации, в другом случае он не зависит от GetTypeScriptOutputForPublishing, файл скомпилированного JavaScript отсутствует в каталоге публикации.
Проблема в том, что я не могу понять, где определена зависимость для PipelineCollectFilesPhase, и теперь я знаю разницу, но не знаю точно, почему.