我们的一台 TFS Build 服务器发生了一些奇怪的事情
这是场景:
我有一个控制器和两个构建服务器,每个服务器有两个代理
如果我将任何构建排入队列,强制它在我的构建服务器 01 上运行,构建成功
如果我在我的构建服务器 02 上排队相同的构建,构建失败
错误如下:
无法创建未知类型“{clr-namespace:MyNamespace;assembly=MyAssembly}MyClassName”。
这是一个自定义的 MSBuild 程序集,它以 .Net Framework 4.5 为目标,在 TFS 控制版本上签入,控制器指向 TFS 上的正确路径。
DLL 在 6 个月内没有更新
我不明白为什么会这样。更令人不安的是,这个构建服务器昨天工作正常,团队中的任何人都对服务器做了任何事情,他们甚至没有访问权限。
我认为错误是在执行构建工作流之前发生的,这意味着由于某种原因无法加载构建模板,这是有道理的,因为无法解析类型
到目前为止我所做的事情:
昨天早上构建服务器02运行顺利
我确定我在两个构建服务器上使用相同的构建运行它。这让我认为构建模板没有问题
我确定我的构建服务器 02 上的任何构建都会失败并出现相同的错误
我测试过的所有构建都在 01 上运行,没有问题
两个构建服务器都在网络上启用、可用和可访问
两个构建服务器都配置了用于运行构建的域帐户
两台服务器都可以访问工作文件夹,并且 TFS 用户可以访问这些服务器
域帐户属于两个构建服务器上的管理员组
我仔细检查了,这些程序集不在两个构建服务器上的 GAC 中(我不想将它们放在 GAC 上,而且我的构建服务器 01 可以正常工作,而无需将 DLL 放在 GAC 上)
我比较了 Windows 更新历史,两台服务器都在 3 个月前的同一日期更新
这是我发现的
在我的构建服务器 01上,我发现用于构建的自定义构建 DLL 位于正确的位置:
C:\Users\MyTFSServiceAccount\AppData\Local\Temp\BuildAgent\24\Assemblies
C:\Users\MyTFSServiceAccount\AppData\Local\Temp\BuildAgent\25\Assemblies
以前的路径具有所需的所有程序集
在我的构建服务器 02上,该文件夹仅包含一个 DLL,由于某些原因,没有复制 DLL,我检查了文件夹权限,一切看起来都很好,tfsservice 帐户对文件夹具有权限,并且它是盒子上的管理员
这些是我的构建服务器 02 上的路径
C:\Users\MyTFSServiceAccount\AppData\Local\Temp\BuildAgent\22\Assemblies
C:\Users\MyTFSServiceAccount\AppData\Local\Temp\BuildAgent\23\Assemblies
好吧,我认为手动复制 DLL 可以暂时解决问题....我错了 =( 我复制了 DLL 但我收到了同样的错误
你们能指出我正确的方向吗?