MsBuild не копирует выходные данные TypeScript в каталог публикации, пытаясь выяснить, почему - PullRequest
0 голосов
/ 13 марта 2019

В моем 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, и теперь я знаю разницу, но не знаю точно, почему.

...