Appveyor, проверьте ссылку на неправильную версию сборки
Новичок в платформе Appveyor, так что это может быть просто моей наивностью. Я создал свой проект для сборки из своего репозитория GitHub. Кажется, это работает, за исключением тестов. Код в основном.Net 4.0, так как он поддерживает унаследованный проект - я не могу перенести его в более позднюю среду. Поскольку этот проект уже использует Newtonsoft.Json, мне пришлось использовать определенную версию. Весь код и тест запускаются локально. Однако, после того, как я настроил CI (и собрал все силы, чтобы восстановить Nuget), я все равно получил полный провал с тестами. Они не делают ничего впечатляющего. Ошибка довольно прямолинейна - Nuget использует версию 6.0.8, но процесс сборки для тестов хочет ссылаться на 8.0.0.0 в соответствии с выводом:
Обнаружение тестов...OK vstest.console /logger:Appveyor "C:\projects\debuginterface\Ratcow.Debugging.Server.Tests\bin\Debug\Ratcow.Debugging.Server.Tests.dll" Команда выполнения теста Microsoft (R) Line Tool Версия 15.0.26228.0 Авторское право (c) Корпорация Microsoft. Все права защищены. Запускается выполнение теста, подождите... Failed BasicTest_ValueTypes Сообщение об ошибке: Метод теста Ratcow.Debugging.Server.Tests.MainUnitTest.BasicTest_ValueTypes вызвал исключение: System.IO.FileLoadException: не удалось загрузить файл или сборку 'Newtonsoft.Json, Version=8.0.0.0, Культура = нейтральная, PublicKeyToken=30ad4fe6b2a6aeed'или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) ---> System.IO.FileLoadException: не удалось загрузить файл или сборку 'Newtonsoft.Json, версия =6.0.0.0, культура = нейтральная, PublicKeyToken = 30ad4fe6b2a6aeed' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) Трассировка стека: в Ratcow.Debugging.Server.DebugInterface.InstanceAsString(значение объекта) в Ratcow.Debugging.Server.DebugInterface.GetVariableValue(строковая переменная Name) в C: \ projects \ debugin.Server\DebugInterface.cs: строка 104 в Ratcow.Debugging.Server.Tests.MainUnitTest.BasicTest_ValueTypes() в C:\projects\debuginterface\Ratcow.Debugging.Server.Tests\MainUnitTest.cs: строка 35
Я могу согласиться с тем, что это, вероятно, правильно - за исключением того, что код ссылается на 6.0.8, как и package.config:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="MSTest.TestAdapter" version="1.1.11" targetFramework="net452" />
<package id="MSTest.TestFramework" version="1.1.11" targetFramework="net452" />
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net40" />
</packages>
Есть идеи? Последняя неудачная сборка с включенными тестами находится здесь. Он успешно собирается, и тесты проводятся на VS2017 на нескольких компьютерах и ноутбуках.
1 ответ
Хорошо, благодаря подсказке Йероена выше (я собирался попробовать это, но у меня не было времени раньше, чем опубликовать этот вопрос), ответ в два раза:
- Это не специфично для Appveyor. Мои тесты также не прошли по тем же причинам, если я запустил vstest.console.exe непосредственно в скомпилированном тестовом проекте. Это была большая часть во мне, решающая проблему, воссоздание проблем всегда является самой большой частью их решения.
Как и предполагалось, добавление в объявление зависимой сборки действительно работает. Вот что я добавил в App.config для тестового проекта:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" <publicKeyToken="30ad4fe6b2a6aeed" /> <bindingRedirect oldVersion="8.0.0.0" newVersion="6.0.0.0" /> </dependentAssembly> </configuration>
Теперь тесты выполняются в командной строке, и, только что зафиксировав код в GitHub, похоже, что Appveyor также создает и запускает тест.