Не удается выполнить развертывание из VS2013 (или TeamCity) после обновления TypeScript 1.6

Сегодня я обновился до TypeScript 1.6, и теперь задача CopyPipelineFiles не выполняется при попытке развернуть веб-приложения.

Я перенаправляю скомпилированный каталог вывода JavaScript TypeScript в scripts\compiled\ в настройках веб-проекта (через запись TypeScriptOutDir в файле csproj), и до сих пор это всегда работало нормально. Файлы машинописного текста компилируются правильно и в правильный каталог (т.е. scripts\compiled\ в каталоге веб-проекта).

Однако задача CopyPipelineFiles, похоже, запуталась в корневом каталоге файлов TypeScript и теперь всегда предполагает, что это корневой каталог веб-проекта. В итоге добавляет в путь несуществующие папки, например, после компиляции scripts\foo.ts вместо захвата scripts\compiled\foo.js MSBuild ищет \scripts\compiled\scripts\foo.js. Я пытался использовать $(ProjectDir) в выходном каталоге, а также пытался установить TypeScriptRootDir в соответствующий корневой каталог (например, scripts\), но проблема не устранена.

Единственный способ, которым я смог исправить ситуацию, — удалить выходной каталог и разрешить вывод скомпилированных файлов JavaScript в те же места, что и их аналоги TypeScript.

Ниже приведен пример реальной ошибки, которую я получил, где путь к файлу TypeScript будет scripts\account\app.ts:

Не удалось скопировать файл scripts\compiled\scripts\account\app.js в obj\Release\AspnetCompileMerge\Source\scripts\compiled\scripts\account\app.js. Не удалось найти часть пути 'scripts\compiled\scripts\account\app.js'

Это происходит на всех локальных машинах с установленным Typescript 1.6, а также на нашем сервере сборки TeamCity с установленным 1.6.


person joelmdev    schedule 13.10.2015    source источник


Ответы (1)


Отправил отчет об ошибке в команду TypeScript, и они его подтвердили. Похоже, проблема с тем, как компилятор вычисляет абсолютные пути. Обходной путь прямо сейчас состоит в том, чтобы явно установить относительные пути как для outDir, так и для rootDir, поэтому что-то вроде этого:

<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
  <TypeScriptOutDir>Scripts\compiled</TypeScriptOutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
  <TypeScriptOutDir>Scripts\compiled</TypeScriptOutDir>
</PropertyGroup>
<PropertyGroup>
  <TypeScriptRootDir>Scripts\typescript</TypeScriptRootDir>
</PropertyGroup>

В моем случае я только что переместил outDir и rootDir в группу свойств без каких-либо условий, так как мне не нужно переключать outputDir между сборками, примерно так:

<PropertyGroup>
  <TypeScriptRootDir>Scripts\typescript</TypeScriptRootDir>
  <TypeScriptOutDir>Scripts\compiled</TypeScriptOutDir>
</PropertyGroup>
person joelmdev    schedule 29.10.2015