Несоответствие версии файла Moq и версии сборки, вызывающее проблемы в TeamCity?

При настройке TeamCity 5.0.1 для запуска модульных тестов в первый раз мы видим эту ошибку:

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

Мы используем версию 3.1.416.3 Moq, dll которой имеет версию файла 3.1.0.0.

Ссылка в файле нашего проекта выглядит так:

<Reference Include="Moq, Version=3.1.416.3, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\lib\binaries\thirdparty\Moq.dll</HintPath>
</Reference>

Мы можем запускать наши модульные тесты в Visual Studion с ReSharper, а также из графического интерфейса nunit (как на наших машинах разработчиков, так и на рассматриваемом сервере сборки).

Что тут происходит?


person Richard Ev    schedule 09.06.2010    source источник
comment
Мы также испытываем эту же проблему. Вы когда-нибудь выясняли, что вызвало это с вашей стороны?   -  person joshuapoehls    schedule 18.06.2010


Ответы (2)


Не 100% ответ, но обходной путь:

Вы можете удалить явный номер версии в файле сборки. Так как он в любом случае предоставляется вашим проектом и используется только для тестов. Просто измените часть "Moq, Version=3.1.416.3,..." на "Moq". Затем используется версия пути подсказки.

person Gamlor    schedule 22.06.2010

Это может быть вызвано зависимостями NuGet. Если вы выполняете Rebuild All своего проекта, вы можете увидеть безобидное предупреждение, когда ваш модульный тестовый проект компилируется, например:

Consider app.config remapping of assembly "Moq, Culture=neutral, PublicKeyToken=69f491c39445e920" from Version "4.0.10827.0" [] to Version "4.1.1309.1617" [C:\XXX\packages\Moq.4.1.1309.1617\lib\net40\Moq.dll] to solve conflict and get rid of warning.

Это предупреждение может не остановить запуск модульных тестов на вашем локальном компьютере, но вполне может помешать TeamCity запустить их.

Вы можете избавиться от предупреждения и заставить TeamCity запускать ваши модульные тесты, добавив что-то подобное в файл App.config для вашей сборки модульного теста;

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

...конечно, используя соответствующие номера версий, о которых вы получаете ошибки, и фактическую установленную версию.

person Frans    schedule 09.10.2013