今天我更新了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构建服务器上都会发生这种情况。
答案 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>