バックグラウンド:
共通のコアを持つ ASP.NET プロジェクトがいくつかあります。コアからの静的は、他のすべてのプロジェクトにコピーされます。すべてのプロジェクトに 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 '...'
理由は、2 つ以上のプロジェクトが TypeScript ファイルをビルドしようとし、いくつかの共通プロジェクトから参照ファイルをビルドしようとするためです。1 つのプロジェクトが ts ファイルから js ファイルへのビルドを開始し、js ファイルをロックします。他のプロジェクトが同じファイルをロックしようとしてクラッシュします。
問題は、そのような並行ビルド/ロックを回避する方法です。参照されたプロジェクトは既にコンパイルされている必要があるため、他のプロジェクトからファイルをビルドしないように TypeScript コンパイラと言うことができますか?