背景:
我们有几个具有共同核心的 ASP.NET 项目。来自 Core 的静态被复制到所有其他项目。我们已将 TypeScript 添加到我们所有的项目中。
下面是 TypeScript 构建在 csproj 中的样子:
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" />
编译 TypeScript 文件时,也会编译所有引用文件。一些 TypeScript 文件引用了 Core 项目中的文件。因此,Core 项目中的文件有时会被编译多次(如果其他项目中的多个文件引用它们)。
简单的例子:
Core.csproj
-> Common.ts
A.csproj
-> ScriptA.ts
B.csproj
-> ScriptB.ts
ScriptA.ts:
/// <reference path="../Core/Common.ts" />
...
ScriptB.ts:
/// <reference path="../Core/Common.ts" />
...
A 或 B 项目的构建也会导致来自 Core 的 Common.ts 也被构建。
问题:
某些文件被构建多次不是问题。但是 - 如果我们并行构建项目(这是默认的 VS 行为!) - 有时构建会因异常而崩溃:
[VsTsc] VSTSC error TS5033: Build: Could not write file '...'
原因是两个或多个项目尝试构建 TypeScript 文件并尝试从某个常见项目构建引用文件。一个项目开始将 ts 文件构建为 js 文件并锁定 js 文件。其他项目试图锁定同一个文件并崩溃。
所以,问题是 - 如何避免这种并行构建/锁定?引用的项目必须已经编译,所以可以说 TypeScript 编译器不会以某种方式从其他项目构建文件?