Автофиксация и Moq v4

Я установил Autofixture и Moq с помощью Nuget. Итак, у меня есть moq версии 4.

При запуске следующего кода

var fixture = new Fixture().Customize(new AutoMoqCustomization());
fixture.CreateAnonymous<ISomething>();

появляется следующая ошибка

System.IO.FileLoadException: не удалось загрузить файл или сборку «Moq, версия = 3.1.416.3, культура = нейтральная, PublicKeyToken = 69f491c39445e920»

Я также пытался перенаправить его на v4, но безуспешно.

<configuration>
  <runtime>
    <assemblyBinding>
    <dependentAssembly>
      <assemblyIdentity name="Moq" publicKeyToken="69f491c39445e920" culture="neutral"/>
      <bindingRedirect oldVersion="3.1.416.3" newVersion="4.0.10827.0"/>
    </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

В чем здесь может быть проблема?


person user256034    schedule 28.06.2011    source источник
comment
См. также этот тикет: autofixture.codeplex.com/workitem/4225   -  person svrist    schedule 26.03.2012
comment
Начиная с версии 2.13.1 необходимые перенаправления привязки сборки теперь автоматически добавляется в файл конфигурации при установке AutoFixture.AutoMoq NuGet.   -  person Enrico Campidoglio    schedule 20.10.2012


Ответы (2)


Чтобы перенаправить привязку сборки в файле конфигурации, необходимо указать пространство имен urn:schemas-microsoft-com:asm.v1 в ‹assemblyBinding› элемент, как в этом примере:

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Moq"
                                  publicKeyToken="69f491c39445e920"
                                  culture="neutral"/>
                <bindingRedirect oldVersion="3.1.416.3"
                                 newVersion="4.0.10827.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

Интересно отметить, что сборки библиотек, скомпилированные с более ранней версией .NET (например, Moq 3 и AutoFixture 2.1) будет автоматически загружаться в процесс, работающий в .NET 4.0, из-за Выполнение параллельного выполнения в процессе. Вот цитата из MSDN по этому поводу:

Если приложение скомпилировано с использованием среды выполнения .NET Framework 4, но включает библиотеку, созданную с использованием более ранней среды выполнения, эта библиотека также будет использовать среду выполнения .NET Framework 4. Однако если у вас есть приложение, созданное с использованием более ранней среды выполнения, и библиотека, созданная с использованием .NET Framework 4, вы должны заставить свое приложение также использовать .NET Framework 4.

Связанные ресурсы:

person Enrico Campidoglio    schedule 28.06.2011

Принятый ответ мне не помог, так как я хочу использовать Moq 4 из той же библиотеки классов (не exe), что и AutoFixture.AutoMoq. Также кажется, что нет планов по поддержке Moq 4 из AutoFixture. В итоге я использовал AutoFixture.AutoRhinoMocks как следующий по популярности выбор, который не конфликтует с Moq 4.

person Dmitry    schedule 26.09.2013
comment
Какие проблемы вы видите? Я использую AutoFixture.AutoMoq с Moq 4 в течение многих лет без проблем. - person Mark Seemann; 23.05.2014