Autofixture и Moq v4

Я установил Autofixture и Moq с помощью Nuget.So У меня есть версия 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>

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

Ответ 1

Чтобы перенаправить привязку сборки в файле конфигурации, вам нужно указать пространство имен 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

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

Ответ 2

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