问题描述
我继承了一个由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
这似乎强制引用了程序集。