2015-10-13 50 views
1

今天我更新到TypeScript 1.6,并且现在CopyPipelineFiles任务在尝试部署Web应用程序时失败。在TypeScript 1.6升级后无法从VS2013(或TeamCity)部署

我在Web项目的设置中(通过csproj文件中的TypeScriptOutDir条目)将TypeScript的编译的JavaScript输出目录重定向到scripts\compiled\,并且直到现在这一直运行良好。正在正确编译Typescript文件并正确编译目录(即web项目目录下的scripts\compiled\)。

但是,CopyPipelineFiles任务似乎对TypeScript文件的根目录感到困惑,现在始终认为它是Web项目的根目录。因此,它将文件夹添加到不存在的路径中,例如编译scripts\foo.ts而不是抓取scripts\compiled\foo.js MSBuild正在查找\scripts\compiled\scripts\foo.js。我已经尝试在输出目录中使用$(ProjectDir),并且我还尝试将TypeScriptRootDir设置为适当的根目录(例如scripts\),但问题仍然存在。

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

以下是我收到了真正的错误,在这里将输出文件的路径将是scripts\account\app.ts的例子:

复制文件脚本编译\ \脚本\帐户\ app.js到OBJ \ Release \ AspnetCompileMerge \ Source \ scripts \ compiled \ scripts \ account \ app.js失败。找不到路径的一部分“脚本\编译\脚本\帐户\ app.js”

这可能发生在打字稿1.6所有本地的机器上安装,以及安装了1.6我们的TeamCity构建服务器。

回答

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>