2016-06-02 4 views
2

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

System.IO.FileLoadException : Could not load file or assembly 'Moq, Version=4.1.1308.2120, 
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) 

Проект построен на .NET 4.5.1 и использует следующие пакеты NuGet (эти версии также используются во всем растворе):

<package id="AutoFixture" version="3.40.1" targetFramework="net451" /> 
<package id="AutoFixture.AutoMoq" version="3.40.1" targetFramework="net451" /> 
<package id="Moq" version="4.2.1510.2205" targetFramework="net451" /> 

Это один из неисправного испытаний (с использованием XUnit 2.0):

[Fact] 
public void SutIsIMessageConverterService() 
{ 
    var fixture = new Fixture().Customize(new AutoMoqCustomization()); 
    var sut = fixture.Create<XmlValidationConverterService>(); 
    Assert.IsAssignableFrom<IMessageConverterService>(sut); 
} 

Этот проект имеет сборочный связывания переадресацией (но безрезультатно):

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

Использование FUSLOGVW.exe на сервере сборки я нашел больше информации (в первую я предположил, Moq не имеет никаких зависимостей):

LOG: DisplayName = Moq.resources, Version=4.2.1510.2205, Culture=en-US, PublicKeyToken=69f491c39445e920 (Fully-specified) 
LOG: Appbase = file:///D:/ProjectName.Tests 
LOG: Initial PrivatePath = NULL 
LOG: Dynamic Base = NULL 
LOG: Cache Base = C:\Users\BuildServerUserName\AppData\Local\Temp\ddf02945-045c-408c-a648-ec5325032f0a 
LOG: AppName = ddf02945-045c-408c-a648-ec5325032f0a 
Calling assembly : Moq, Version=4.2.1510.2205, Culture=neutral, PublicKeyToken=69f491c39445e920. 
LOG: This bind starts in default load context. 
LOG: Using application configuration file: D:\ProjectName.Tests.dll.config 
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. 
LOG: Post-policy reference: Moq.resources, Version=4.2.1510.2205, Culture=en-US, PublicKeyToken=69f491c39445e920 
LOG: GAC Lookup was unsuccessful. 
LOG: Attempting download of new URL file:///D:/ProjectName.Tests/en-US/Moq.resources.DLL. 
LOG: Attempting download of new URL file:///D:/ProjectName.Tests/en-US/Moq.resources/Moq.resources.DLL. 
LOG: Attempting download of new URL file:///D:/ProjectName.Tests/en-US/Moq.resources.EXE. 
LOG: Attempting download of new URL file:///D:/ProjectName.Tests/en-US/Moq.resources/Moq.resources.EXE. 
LOG: All probing URLs attempted and failed. 

Так Moq зависит от Moq.resources и она не может быть найден.

Кто-нибудь знает, почему он ищет это (что это такое?) И как я могу это исправить?

+0

Какая версия TFS вы используете? Вы используете сборку XAML или vNext? –

+0

@ Cece-MSFT TFS 2013 и шаблон построения XAML. – bump

+2

Версия AutoFixture версии 3.40.1 больше не доступна. Для всех продуктов были доступны новые версии. Рассмотрим обновление. –

ответ

0

Попробуйте решение в this блоге:

  • из любого файла .config, удалите элемент и его дочерние элементы.
  • Откройте консоль диспетчера пакетов в Visual Studio. Это можно сделать с помощью View | Другие окна | Меню консоли диспетчера пакетов.
  • Напечатайте эту магическую команду, которая решает все: Get-Project -All | Add-BindingRedirect.
+0

Как уже упоминалось, у меня есть перенаправление привязки (я даже использовал команду, которую вы предлагаете). Но это не работает. При запросе файла Moq.resources (по самому Moq) это, похоже, не срабатывает. – bump

+0

Проверьте историю версий AutoFixture с Auto Mocking с помощью Moq на веб-сайте https://www.nuget.org/packages/AutoFixture.AutoMoq/, это правда, что 3.40.1 недоступно, вам необходимо обновить его. –

+0

Обновлено, но по-прежнему имеет ту же ошибку. – bump

1

Я все время стучал головой о стол, но исправление заключалось в том, чтобы добавить перенаправление привязки в файл конфигурации. Кажется, что AutoMoqCustomization зависит от более старой версии Moq, которая не правильно указана в зависимостях пакета. Применяя это перенаправление, вы обходите это требование.

<dependentAssembly> 
    <assemblyIdentity name=\"Moq\" publicKeyToken=\"69f491c39445e920\" culture=\"neutral\" /> 
    <bindingRedirect oldVersion=\"0.0.0.0-4.2.1510.2205\" newVersion=\"4.2.1510.2205\" /> 
    </dependentAssembly> 

 Смежные вопросы

  • Нет связанных вопросов^_^