2014-10-02 5 views
2

У меня возникли проблемы с одним тестовым проектом на нашем сервере сборки. В некоторых тестах в проекте используется AutoFixture с AutoMoq.Перенаправление ссылки Moq для AutoFixture

Поскольку AutoMoq использует старую версию MOq, чем тот, который мы используем в противном случае, мы имеем перенаправление в app.config (сделано по сценарию AutoMoq NuGet я предполагаю):

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Moq" publicKeyToken="69f491c39445e920" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.2.1409.1722" newVersion="4.2.1409.1722" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Ploeh.AutoFixture" publicKeyToken="b24654c590009d4f" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.20.2.0" newVersion="3.20.2.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

Тестов работать без проблема на разработчиках машин, но один проект (среди многих, которые используют AutoFixture, AutoMoq и Moq) бросает это у меня при запуске с TeamCitys NUnit бегуном:

Test(s) failed. System.IO.FileLoadException : Could not load file or assembly 'Moq, Version=4.0.10827.0, Culture=neutral, PublicKeyToken=69f491c39445e920' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 
    at Ploeh.AutoFixture.AutoMoq.MockPostprocessor.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.CustomizationNode.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.Kernel.TracingBuilder.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.Kernel.TerminatingWithPathSpecimenBuilder.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.BehaviorRoot.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.Kernel.RecursionGuard.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.Fixture.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.Kernel.SpecimenContext.Resolve(Object request) 
    at Ploeh.AutoFixture.SpecimenFactory.Create[T](ISpecimenContext context, T seed) 
    at Ploeh.AutoFixture.SpecimenFactory.Create[T](ISpecimenContext context) 

Почему ссылка Moq к (4.0.10827.0 видимо) не перенаправлен на 4.2.1409.1722?

Я проверил рабочий каталог build-server, и app.config и dll выглядят нормально.

+2

FWIW, напоминающей об этой проблеме: https: //github.com/AutoFixture/AutoFixture/issues/260 –

+0

Трудно сказать, является ли это той же проблемой, поскольку сообщенные данные не предоставили подробной информации. – Holstebroe

ответ

0

Как объяснено в the relevant AutoFixture issue AutoFixture не зависит и не будет зависеть от последних из-за этого.

Ваше сообщение об ошибке не имеет ничего общего с какой-либо версией, требуемой любым автоматическим устройством, поэтому что-то в вашей среде является единственным возможным объяснением. Id 'используйте \\live.sysinternals.com\tools\procexp.exe, чтобы узнать, что происходит.

+0

Использование procexp при единичном тестировании, выполняемом сервером сборки (это проблема только с сервером сборки), вероятно, будет затруднительным. В итоге я переписал тесты без AutoFixture. Все остальные тестовые проекты, использующие AutoFixture andMoq, отлично работают. – Holstebroe

+1

Моя точка зрения заключается в том, что req Moq '4.2.1409.1722' определенно НЕ поступает из AF, и поэтому вам нужно найти, что в вашей среде представляет конфликт. Не похоже, что в AutoFixture есть бродячий электрон или что-то в этом роде. Это будет что-то очень скучное, когда вы начинаете его заставлять. В то время как переписывание без зависимостей всегда имеет свои достоинства, так и корневой материал и выяснение того, что вы и/или скрипты сборки сделали неправильно. –

0

Я не знаю, если это поможет, но у меня была проблема с подобными симптомами, и решение оказалось нечто совсем другое, а именно это: https://stackoverflow.com/a/3668371/487544