温莎城堡-单元测试中的FileNotFoundException

问题描述

我继承了一个由VB.Net项目组成的ASP.Net Web应用程序。我已经在解决方案中添加一个C#项目,其中引用了多个VB.Net项目。

该应用程序使用Castle Windsor作为DI容器,并且依赖项已在VB.Net项目之一中注册

在该VB.Net项目中。为了避免循环引用,我使用“ FromAssemblyNamed”方法注册在C#项目中定义的依赖项:

container.Register(Classes.FromAssemblyNamed("x.y.z.TLBusinessLayerV2").BasedOn(Of IService).WithService.FromInterface().Configure(Function(c) c.LifeStyle.Transient))

当我运行应用程序时,它运行良好。

但是,有一个现有的单元测试项目。在那我添加了对我的C#程序集的引用。 当我运行所有测试时,当某些测试达到上面的代码时会失败,但有以下例外:

System.IO.FileNotFoundException:无法加载文件或程序集x.y.z.TLBusinessLayerV2'或其依赖项之一。系统找不到指定的文件

  • 单元测试项目也引用了C#程序集引用的所有程序集。
  • VB.Net项目,C#项目和单元测试项目的目标cpu都设置为x86。

如果我随后分别运行失败的测试之一,则测试通过。

问:问。为什么当我全部运行测试时都失败了? 任何帮助表示赞赏。

解决方法

此问题的解决方案是向单元测试项目中添加一个伪类,该伪类引用程序集中的一个类(加载到“ Classes.FromAssemblyNamed”中)。像这样:

Public Class DummyDependencies
        Private Xyz As Object = GetType(<name of a class in target assembly>)
End Class

这似乎强制引用了程序集。