1

我在我的测试项目中使用 Castle Windsor 进行依赖注入。我正在尝试创建我的“存储库”类之一的实例。“它在我的机器上运行良好”,但是当我在 TFS 中运行每晚构建时,我的测试无法加载所述类。

private static readonly WindsorContainer _container = new WindsorContainer(new XmlInterpreter());


    public void MyTestInitialize()
    {
        var testRepository = (IBogusRepository)_container[typeof(IBogusRepository)];

    }

xml配置:

<castle>
    <components>
      <component id="primaryBogusRepository" type="Example2008.Repository.LALALALALA, Example2008.Repository" service="Example2008.Domain.Repository.IBogusRepository, Example2008.Domain" />
      <component id="primaryProductRepository" type="Example2008.Repository.ProductRepository, Example2008.Repository" service="Example2008.Domain.Repository.IProductRepository, Example2008.Domain" />
    </components>
  </castle>

当我对新构建进行排队时,它会产生以下消息:

无法创建类 Example2008.Test.ActiveProductRepositoryTest 的实例。错误:System.Configuration.ConfigurationException:找不到类型名称 Example2008.Repository.LALALALALA,Example2008.Repository。

Castle.Windsor.Installer.DefaultComponentInstaller.ObtainType(String typeName) Castle.Windsor.Installer.DefaultComponentInstaller.SetUpComponents(IConfiguration[] 配置,IWindsorContainer 容器) Castle.Windsor.Installer.DefaultComponentInstaller.SetUp(IWindsorContainer 容器,IConfigurationStore 存储) Castle.Windsor .WindsorContainer.RunInstaller() Castle.Windsor.WindsorContainer..ctor(IConfigurationInterpreter 解释器) Example2008.Test.ActiveProductRepositoryTest..cctor() in d:\Code_Temp\Example Project Nightly\Sources\Example2008.Test\ProductRepositoryTest.cs:第 19 行

从这条消息看来,我的配置是正确的(可以看出我要实例化具体类'LALALALALA',所以xml配置明显已经正确的红色了)

我认为我的依赖项设置也正确(因为它在本地工作,即使我清理解决方案并重建)。

有什么想法吗?

(顺便说一句,使用 VS2008、TFS 2008.Net 3.5、Castle 1.03)

4

2 回答 2

0

听起来 bin 目录(或您的执行目录用于构建的任何位置)中缺少包含存储库实现的程序集。

我会首先检查程序集是否存在于构建服务器的执行目录中。

如果它确实存在,那么我会检查以确保程序集的版本是正确的,即在同一名称空间中具有存储库实现等。

可能是您的构建服务器在 VS 执行/构建的其他地方执行/构建对象。

于 2008-09-19T12:31:17.480 回答
0

这太有趣了。我发现这篇博文可能对您的问题有所帮助。 看起来 MSTest 正在使用它作为其工作目录,至少可以说这很烦人。博客文章展示了如何更改目录,以便获得一致的结果。我还会做一些谷歌搜索,看看是否存在更优雅的解决方案。

于 2008-09-25T12:45:33.310 回答