MS单元测试在构建服务器上执行两次(第二次执行时也失败)

时间:2017-12-08 14:09:17

标签: .net visual-studio-2015 tfs build

我们有

- > a .Net应用程序(使用Framework 4.6.2和VS2015),我们有1075个MS单元测试用例。

- >我们运行的2个TFS构建服务器(允许服务器A和服务器B)和为我们的App创建构建。

问题:

当我们在serverA上触发构建时,构建执行成功,所有1075个测试用例成功执行一次。

但是在serverB上,首先所有1075个测试用例都成功执行,然后再次执行几个测试用例,所有重复的测试用例都失败了。

所有测试用例都失败并显示消息:测试方法TestMethodName引发异常System.BadImageFormatException,但预期会出现异常System.IndexOutOfRangeException。异常消息:System.BadImageFormatException:无法加载文件或程序集“MyProject.Maths,Version = 9.2.161.0,Culture = neutral,PublicKeyToken = 8ve3d5d1cc33a581”或其依赖项之一。试图加载格式不正确的程序。“

查询:

为什么serverB再次执行少量测试用例?

为什么重复的测试用例失败了?

主要关注的是,对于两个服务器,我们使用相同的Build定义和相同的构建模板。因此,问题不在构建定义方面发生,它应该是构建serverB配置的问题。

我读到的所有答案都建议在构建定义或构建模板或某些软件卸载时进行更改,而其他建议您的测试项目由多个项目进行更改(事实并非如此),但现在没有任何作用。

另外,如果我假设我的代码/构建模板方面可能存在某些问题,但ubit-test情况再次在其他服务器上成功运行。

请你帮忙,可能是什么原因。

1 个答案:

答案 0 :(得分:0)

首先,确保服务器A和服务器B具有相同的配置。

无论如何,基于错误消息" System.BadImageFormatException ......"它应该是不兼容问题。

  

最终,System.BadImageFormatExceptions是一个指示   不兼容的版本控制。对于许多现代软件应用程序,主要   版本通常包括破坏兼容性问题,防止   向后兼容以前版本的某些方面。 。净   程序集(.dlls或.exes)大致相同,并试图制作   使用包含两种不同类型的程序集   不兼容性往往会产生一个   System.BadImageFormatException。

     

第一种(也可以说是最常见的)筹集方式   System.BadImageFormatException是在尝试使用时   非托管程序集,就好像它是用.NET创建的程序集一样   框架。非托管程序集是已经成为的程序集   从公共处理和编译的代码生成   .NET的语言运行时。这包括许多旧的应用程序和   程序集,特别是为32位系统创建的程序集。

     

我们可能抛出System.BadImageFormatException的另一种方法是   尝试加载使用不同CPU编译的程序集   类型比我们当前正在执行.NET的类型。

     

最后,如果我们尝试加载程序集,我们也会遇到麻烦   这是使用较旧版本的.NET(例如.NET)编译的   1.1)

     

来源:.NET Exception Handling – System.BadImageFormatException

此文章也供您参考:https://msdn.microsoft.com/en-us/library/k7137bfe.aspx?f=255&MSPPError=-2147217396

因此,请尝试以下项目来检查它是否适合您:

  • 在构建定义中启用清除选项。 (两个存储库 选项卡和构建任务步骤)
  • 检查测试项目的目标平台是否与之匹配 您正在测试的项目。 右键单击您的项目,然后选择&#39; 属性&#39; - &GT;选择 &#39; <强>构建&#39;左侧的标签 - &gt;分别更改为x86 / x64 / AnyCPU 再次检查一下。