TypeScript 1.6升级后无法从VS2013(或TeamCity)部署

时间:2015-10-13 23:49:51

标签: msbuild typescript webdeploy typescript1.6

今天我更新了TypeScript 1.6,现在尝试部署Web应用程序时CopyPipelineFiles任务失败。

我将TypeScript编译的JavaScript输出目录重定向到Web项目设置中的scripts\compiled\(通过csproj文件中的TypeScriptOutDir条目),这一直到目前为止一直很好。正在正确编译打字稿文件,并正确编译到正确的目录(即Web项目目录下的scripts\compiled\)。

但是,CopyPipelineFiles任务似乎对TypeScript文件的根目录感到困惑,现在总是假设它是Web项目的根目录。因此,它将文件夹添加到不存在的路径中,例如,在编译scripts\foo.ts之后,而不是抓取scripts\compiled\foo.js MSBuild正在寻找\scripts\compiled\scripts\foo.js。我尝试在输出目录中使用$(ProjectDir),我也尝试将TypeScriptRootDir设置为相应的根目录(例如scripts\),但问题仍然存在。

我能够解决这种情况的唯一方法是删除输出目录,并允许将已编译的JavaScript文件输出到TypeScript对应的相同位置。

以下是我收到的实际错误示例,其中TypeScript文件的路径为scripts\account\app.ts

  

将文件脚本\ compiled \ scripts \ account \ app.js复制到obj \ Release \ AspnetCompileMerge \ Source \ scripts \ compiled \ scripts \ account \ app.js失败。找不到路径'scripts \ compiled \ scripts \ account \ app.js'

的一部分

在安装了Typescript 1.6的所有本地计算机上以及安装了1.6的TeamCity构建服务器上都会发生这种情况。

1 个答案:

答案 0 :(得分:0)

Filed a bug report with the TypeScript team and they've confirmed it.似乎是编译器如何计算绝对路径的问题。现在的解决方法是显式设置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>