Автофикс и Moq v4 - PullRequest
       40

Автофикс и Moq v4

12 голосов
/ 28 июня 2011

Я установил 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>

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

Ответы [ 2 ]

17 голосов
/ 28 июня 2011

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

<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

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

1 голос
/ 26 сентября 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...