Msbuild 类型脚本并行构建 背景:

Msbuild 类型脚本并行构建 背景:,msbuild,typescript,parallel-builds,Msbuild,Typescript,Parallel Builds,我们有几个具有共同核心的ASP.NET项目。从Core复制的静态数据将复制到所有其他项目。我们已将TypeScript添加到所有项目中 以下是TypeScript构建在csproj中的外观: <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" /> 脚本A.ts

我们有几个具有共同核心的ASP.NET项目。从Core复制的静态数据将复制到所有其他项目。我们已将TypeScript添加到所有项目中

以下是TypeScript构建在csproj中的外观:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" />
脚本A.ts:

/// <reference path="../Core/Common.ts" />
...
原因是两个或多个项目尝试构建TypeScript文件,并尝试从某个公共项目构建引用文件。一个项目开始将ts文件构建为js文件并锁定js文件。其他项目试图锁定同一文件并崩溃


所以,问题是-如何避免这种并行构建/锁定?引用的项目必须已经编译,所以可以说TypeScript编译器不会以某种方式从其他项目生成文件?

我通过将共享库作为NuGet包提供来处理这个问题。这不仅使您的构建独立,还允许您控制您的依赖关系(即,您可以在决定升级时进行升级,而不仅仅是因为有人编辑了共享文件)。

我通过将共享库作为NuGet包提供来处理这一问题。这不仅使您的构建独立,还允许您控制依赖关系(即,您可以在决定升级时升级,而不仅仅是因为有人编辑了共享文件)。

我建议您将project Common视为一个库,而不是单个文件的集合

当您使用第
//
行引用Common时,这会将Common.ts(可能还有它引用的文件)拉入项目A和B中,从而复制它,并使其编译多次

相反,你需要的是

/// <reference path="../Core/Common.d.ts" />
//
也就是说,您只使用来自项目公共的声明。声明不是默认生成的,您应该在项目配置的TypeScript页面上选中选项“生成声明文件”,或者如果您更喜欢手动添加行

<TypeScriptGeneratesDeclarations>True</TypeScriptGeneratesDeclarations>
True

在您的.csproj文件中。一个小缺点是,您必须将多个.js文件加载到页面或node.js项目中。然而,将代码组合成模块的能力付出的代价很小。例如,有一天您可能想将A.js和B.js加载到同一个页面中,结果会变得一团糟,因为common.ts的副本会发生冲突并相互覆盖。通过类型声明引用解决了这个问题,以及构建中断的特定问题。

我建议您将project Common视为一个库,而不是单个文件的集合

当您使用第
//
行引用Common时,这会将Common.ts(可能还有它引用的文件)拉入项目A和B中,从而复制它,并使其编译多次

相反,你需要的是

/// <reference path="../Core/Common.d.ts" />
//
也就是说,您只使用来自项目公共的声明。声明不是默认生成的,您应该在项目配置的TypeScript页面上选中选项“生成声明文件”,或者如果您更喜欢手动添加行

<TypeScriptGeneratesDeclarations>True</TypeScriptGeneratesDeclarations>
True
在您的.csproj文件中。一个小缺点是,您必须将多个.js文件加载到页面或node.js项目中。然而,将代码组合成模块的能力付出的代价很小。例如,有一天您可能想将A.js和B.js加载到同一个页面中,结果会变得一团糟,因为common.ts的副本会发生冲突并相互覆盖。通过类型声明引用解决了这个问题,以及构建中断的特定问题

<TypeScriptGeneratesDeclarations>True</TypeScriptGeneratesDeclarations>