1

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

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

但是,CopyPipelineFiles任务似乎对 TypeScript 文件的根目录感到困惑,现在总是假设它是 Web 项目的根目录。结果,它将文件夹添加到不存在的路径中,例如,在编译之后scripts\foo.ts,而不是抓取scripts\compiled\foo.jsMSBuild 正在寻找的\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 的本地机器上,以及我们安装了 1.6 的 TeamCity 构建服务器上。

4

1 回答 1

0

向 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>
于 2015-10-29T17:19:15.483 回答