Angular 2 个应用程序的 TFS 构建失败(TypeScript 错误),但在本地构建一切正常

TFS Build fails for Angular 2 application (TypeScript errors), but everything builds fine locally

我正在使用安装了 Update 3 的 Visual Studio 2015。我有一个解决方案,其中包含一个用 TypeScript 编写的 Angular 2 应用程序。此应用程序是按照 Angular 自己的“5 分钟快速入门”指南添加到解决方案中的:https://angular.io/guide/quickstart

angular 应用程序还没有完成,实际上它才刚刚开始开发。 angular 2 项目的所有配置文件均直接取自该指南且未进行修改。

该解决方案在我的本地机器上构建得很好。但是,当我执行启动构建的 TFS 签入时,解决方案无法在远程构建服务器上构建。

我在 MSBuild 步骤中遇到以下错误,它们都与 TypeScript 相关:

这些错误中的大多数会重复多次指向 angular 2 应用程序的各个部分。总共有29个错误。

有趣的是,构建日志中的每一个错误后面都有对包含 angular 应用程序的 .csproj 文件的引用。

据我了解,TypeScript 文件应该根据 tsconfig.json 文件中定义的配置属性进行编译,而不是 Visual Studio 项目的属性。事实上,当我在本地打开解决方案并尝试从 Visual Studio 中的属性修改 TypeScript 配置时,它告诉我这些属性由于存在 tsconfig.json 文件而被禁用。

同样,一切都在本地构建良好,零错误。它只在远程构建服务器上构建失败。

那么这里有人有什么想法吗?远程构建服务器是否可能不是最新的,因此没有读取我的 tsconfig.json 文件?

为了完整起见,这是我的 tsconfig.json 文件...

{
"compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": true,
    "suppressImplicitAnyIndexErrors": true
},
"compileOnSave": true
}

编辑

更新:好的,我想我正在缩小这个问题的范围。似乎在 TFS 构建中我的 tsconfig.json 绝对没有被读取。

这是我在本地 运行 MSBuild 时的日志...

PreComputeCompileTypeScriptWithTSConfig:
  C:\Program Files (x86)\Microsoft SDKs\TypeScript.8\tsc.exe --project "C:\[MY PATH GOES HERE]\tsconfig.json" 
CompileTypeScriptWithTSConfig:
  C:\Program Files (x86)\Microsoft SDKs\TypeScript.8\tsc.exe --project "C:\[My PATH GOES HERE]\tsconfig.json"

但这是远程 TFS 构建中发生的事情...

        PreComputeCompileTypeScript:
          C:\Program Files (x86)\Microsoft  SDKs\TypeScript.5\tsc.exe  --sourcemap --target ES5 --noEmitOnError COMPUTE_PATHS_ONLY 
        CompileTypeScript:
          C:\Program Files (x86)\Microsoft SDKs\TypeScript.5\tsc.exe  --sourcemap --target ES5 --noEmitOnError 

所以...我的构建服务器使用的是 TypeScript 1.5,而我在本地使用的是 1.8。当然,1.8 是在 Visual Studio 中引入对 tsconfig.json 的改进支持。希望我所要做的就是找人更新 TFS 服务器上的 TypeScript。

您最好确保您的构建服务器(构建代理)上的环境与您本地的环境相同。这将大大降低构建失败的风险。

根据您的情况,尝试将 TypeScript 1.5 更新到版本 1.8 并再次排队构建。如果仍然不行,您可以尝试在构建代理(机器)上手动构建而不是通过 tfs 来缩小问题是否与代理环境或 TFS 构建定义设置有关。