Фон:
У нас есть несколько проектов ASP.NET с общим ядром. Статика из Core копируется во все остальные проекты. Мы добавили TypeScript во все наши проекты.
Вот как выглядит сборка TypeScript в csproj:
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" />
Когда файлы TypeScript компилируются, все файлы ссылок также компилируются. Некоторые файлы TypeScript ссылаются на файлы из основного проекта. Так, файлы из проекта 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 также вызывает сборку Common.ts из Core.
Проблема:
Не проблема, что некоторые файлы собираются несколько раз. НО - если мы строим проекты параллельно (и это поведение VS по умолчанию!) - иногда сборка аварийно завершается с исключением:
[VsTsc] VSTSC error TS5033: Build: Could not write file '...'
Причина в том, что два или более проектов пытаются создать файлы TypeScript и пытаются создать файлы, на которые ссылаются, из какого-то общего проекта. Один проект начинает сборку файла ts в файл js и блокирует файл js. Другой проект пытается заблокировать тот же файл и падает.
Итак, вопрос - как избежать таких параллельных сборок/блокировок? Ссылочный проект должен быть уже скомпилирован, поэтому, может быть, компилятор TypeScript не будет каким-то образом создавать файлы из других проектов?