System BadImageFormatException Неверный формат исполняемого файла (.exe) или библиотеки (.dll) - PullRequest
0 голосов
/ 22 апреля 2020

CI конвейер занимает около 50 минут, и большая часть времени затрачивается на тестирование. Иметь хорошее количество юнит-тестов и тестов на основе данных. Решили запустить тест параллельно, и подход, основанный на этом, сделал c Запуск тестов параллельно в конвейерах сборки

Идея состоит в том, чтобы разбить конвейер на 3 задания

  1. Построить задание : создает двоичные файлы и публикует sh их для артефактов с именем pre-drop.

  2. Тестовое задание : загрузка предварительного отбрасывания артефакта, извлечение файлов, параллельное выполнение тестов с использованием VSTest@2 задачи

  3. Publi sh Job : publi sh артефакты для отбрасывания (для конвейера выпуска).

Не уверен, смог ли я перенести свою идею в .yml.

Тестовое задание

- job : 'TestJob'
  pool:
    vmImage: windows-latest
  strategy:
    parallel: 2
  dependsOn: 'BuildJob'

  steps:

  - task: DownloadBuildArtifacts@0
    inputs:
      buildType: 'current'
      downloadType: 'single'
      artifactName: 'predrop'
      downloadPath: '$(System.ArtifactsDirectory)'

  - task: ExtractFiles@1
    inputs:
      archiveFilePatterns: '$(System.ArtifactsDirectory)/predrop/predrop.zip'
      destinationFolder: '$(System.ArtifactsDirectory)/predrop/Extpredrop'

  - task: VSTest@2
    inputs:
      testSelector: 'testAssemblies'
      testAssemblyVer2: |
       **\*tests.dll
       !**\*TestAdapter.dll
       !**\obj\**
      searchFolder: '$(System.ArtifactsDirectory)'
      vstestLocationMethod: 'location'
      vstestLocation: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\Extensions\TestPlatform\'
      otherConsoleOptions: '/platform:x64 /Framework:.NETCoreApp,Version=v3.1'

Проблема в том, что задача VSTest распознает и запускает некоторые тесты, но выдает ошибку в других тестах с последующей ошибкой в ​​некоторых тестах

System.BadImageFormatException : Could not load file or assembly 'Microsoft.Extensions.Logging.Abstractions, Version=3.1.3.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. 
Format of the executable (.exe) or library (.dll) is invalid.

Двоичные файлы из первого задания сгенерировали Microsoft.Extensions.Logging.Abstractions.dll как часть артефакта.

1 Ответ

0 голосов
/ 23 апреля 2020

В документе BadImageFormatException Class говорится, что это исключение выдается в следующем сценарии:

  • DLL или исполняемый файл загружен как 64-разрядная сборка, но это содержит 32-битные функции или ресурсы. Например, он полагается на COM-взаимодействие или вызывает методы в 32-разрядной динамической c библиотеке ссылок.

  • Чтобы устранить это исключение, задайте для целевого свойства Platform проекта значение x86 (вместо этого x64 или AnyCPU) и перекомпилируйте.

Таким образом, вы можете попробовать настроить задачу VSBuild для перестройки проекта под x86 или x64. Проверьте эту похожую ошибку в этой теме .

Если вышеуказанное изменение платформы не работает. Вы можете попробовать этот обходной путь, чтобы добавить задачу VSBuild, чтобы построить свой проект в задании TestJob . Таким образом, не нужно будет загружать и извлекать артефакты в задании TestJob . Для примера ниже:

- job : 'TestJob'
  pool:
    vmImage: windows-latest
  strategy:
    parallel: 2
  dependsOn: 'BuildJob'

  steps:
  - task: VSBuild@1
    inputs:
      solution: '**/*.sln'
      platform: "any cpu"
      configuration: 'Release'

  - task: VSTest@2
    inputs:
      ...

Вы также можете проверить эту тему .

...