문제

테스트 프로젝트에서 종속성 주입을 위해 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의 인스턴스를 만들 수 없습니다.오류:시스템.구성.구성예외:유형 이름 example2008.repository.lalalala, example2008.repository를 찾을 수 없습니다.

Castle.Windsor.Installer.DefaultComponentInstaller.ObtainType(String typeName) Castle.Windsor.Installer.DefaultComponentInstaller.SetUpComponents(IConfiguration[] configurations, IWindsorContainer container) Castle.Windsor.Installer.DefaultComponentInstaller.SetUp(IWindsorContainer container, IConfigurationStore store) Castle.Windsor .windsorContainer.runinStaller () Castle.Windsor.WindSorContainer..CTOR (iconfigurationInterpreter 통신) example2008.test.ActiveProductOsitoryTest..cctor ()에서 D : Code_Temp expormes exporm8.test produpority sources exporme2008.test test trepositority sources :19번째 줄

이 메시지를 보면 내 구성이 올바른 것 같습니다(구체적인 클래스 'LALALALA'를 인스턴스화하려고 하므로 xml 구성이 분명히 빨간색으로 올바르게 표시되었음을 알 수 있습니다).

내 종속성도 올바르게 설정되어 있다고 생각합니다(솔루션을 정리하고 다시 빌드하더라도 로컬에서 작동하기 때문입니다).

이견있는 사람?

(그런데 VS2008, TFS 2008.Net 3.5, Castle 1.03 사용)

도움이 되었습니까?

해결책

그것 참 흥미 롭네.나는 찾았다 문제에 도움이 될 수 있는 이 블로그 게시물을 참조하세요.MSTest가 이를 작업 디렉터리로 사용하고 있는 것 같은데, 이는 아무리 말해도 짜증나는 일입니다.블로그 게시물에서는 일관된 결과를 얻을 수 있도록 디렉터리를 변경하는 방법을 보여줍니다.또한 좀 더 우아한 솔루션이 존재하는지 알아보기 위해 인터넷 검색을 좀 해보겠습니다.

다른 팁

저장소 구현을 보유하는 어셈블리가 bin 디렉토리(또는 빌드를 위한 실행 디렉토리가 있는 곳)에서 누락된 것 같습니다.

먼저 빌드 서버의 실행 디렉터리에 어셈블리가 있는지 확인합니다.

존재한다면 어셈블리 버전이 올바른지 확인합니다.동일한 네임스페이스 등에 저장소 구현이 있습니다.

빌드 서버가 VS가 실행/빌드되는 위치가 아닌 다른 곳에서 개체를 실행/빌드하고 있을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top