在 Bamboo 中 运行 时不同的 .NET 构建结果

Different .NET build result when run in Bamboo

我正在使用 Atlassian Bamboo 构建 .net 4.5.2 应用程序。该构建在 Telerik.Windows.Controls.Data 的依赖项下运行良好已有数周时间。

在最近的功能分支上,我添加了对 Telerik.Windows.Controls.GridView.dll 版本 2015.3.1104.45 的依赖。现在构建失败了。

warning MSB3245: Could not resolve this reference. Could not locate the assembly "Telerik.Windows.Controls.GridView, Version=2015.3.1104.45, Culture=neutral, PublicKeyToken=5803cfa389c90ce7, processorArchitecture=MSIL". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors. 24-Dec-2015 08:11:23

error MC3074: The tag 'RadGridView' does not exist in XML namespace 'http://schemas.telerik.com/2008/xaml/presentation'. Line 55 Position 18.

按照构建失败时的传统做法,我遵循了以下分类步骤:

  1. 检查有问题的提交并在我的工作站上测试构建
  2. 如果 "works on my machine™",请登录构建服务器并使用失败的工作目录测试构建

我在 visual studio 2015 IDE 构建了两个步骤。在这种情况下 - 两个构建都成功。令人沮丧!所以我进入命令行并使用 Bamboo 执行的命令行构建解决方案:

call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.com"  "SolutionNameRedacted.sln" /rebuild Release 

这也成功了!

我注意到 bamboo 日志中的以下行:

24-Dec-2015 08:10:23 C:\Atlassian\Data\Bamboo\xml-data\build-dir\CS-CC13-JOB1>call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64 24-Dec-2015 08:10:23 '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"' is not recognized as an internal or external command,

此批处理文件用于指定编译器工具集。是找不到的问题吗?我一直假设编译器偏好是由项目文件表达的。我检查了 Microsoft Visual Studio 14.0 目录,vcvarsall.bat 不存在。

csproj 文件自上次构建以来的唯一重大变化是添加了以下行:

<Reference Include="Telerik.Windows.Controls.GridView, Version=2015.3.1104.45, Culture=neutral, PublicKeyToken=5803cfa389c90ce7, processorArchitecture=MSIL" />

我有点不知所措,因为它导致交货大幅下滑。

我目前的理论是这是一个用户帐户问题,bamboo 无法访问它需要的 Telerik 程序集。我的下一步也是:

  1. 引用 xaml 文件中使用 clr-namespace 的程序集
  2. 在具有更高权限的用户帐户上测试构建(遗憾的是我没有那种访问权限)

事实证明,Telerik 没有将他们的二进制文件安装到 GAC。 Visual Studio 需要 csproj 文件中的 <hintpath> 条目以帮助发现。这个路径应该是你的安装目录。

这听起来像个废话吗?这是 abd 我并没有留下深刻的印象。值得庆幸的是,Telerik VS Extension 将为您添加参考和提示路径。我的建议是始终使用此向导。

缺点 - 您的所有开发人员都需要将 Telerik 库安装在同一文件夹中。我很确定您可以通过 GAC 手动注册二进制文件来避免这种情况。