У меня есть решение, содержащее 4 проекта (упрощенные имена)
- MyApplication (. Net Standard 2.0)
- MyApplication.Test.1 (. Net Core 3.1)
- MyApplication.Test.2 (. Net Core 3.1)
- MyApplication.Test.3 (. Net Core 3.1)
Папка решения содержит файл * .sln и по одной папке на проект (плюс материал для Git управления исходным кодом).
Каждый из трех тестовых проектов использует собственный пакет NuGet, "MyNugetPackage"; этот пакет существует в нашей среде Azure как артефакт. Они также используют NUnit3 - ссылки NuGet тестового проекта следующие:
<PackageReference Include="MyNugetPackage" Version="2020.1.1" />
<PackageReference Include="nunit" Version="3.12.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.16.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
Я создал следующий файл YAML для нашего конвейера:
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
buildConfiguration: release
platform: x64
steps:
- task: NuGetToolInstaller@1
inputs:
versionSpec:
checkLatest: true
- task: NuGetCommand@2
inputs:
command: 'restore'
restoreSolution: '**/*.sln'
feedsToUse: 'select'
vstsFeed: '{GuidA}/{GuidB}'
- task: MSBuild@1
inputs:
solution: '**/*.sln'
msbuildArchitecture: 'x64'
platform: 'Any CPU'
configuration: 'Release'
msbuildArguments: '-m'
clean: true
- task: DotNetCoreCLI@2
inputs:
command: test
projects: '**/*Tests/*.csproj'
arguments: '--configuration Release'
Первоначально это не удалось на этапе MSBuild До тех пор, пока я не выяснил, как настроить разрешения для извлечения из нашего Azure артефакта (свойство vstsFeed). После успешного выполнения шага MSBuild происходит сбой при выполнении шага DonNetCoreCLI (Test): я получаю несколько сообщений, подобных:
MyTestFile.cs (13,22): ошибка CS0234: имя типа или пространства имен «AB C» не существует в пространстве имен «MyNugetPackage» (отсутствует ссылка на сборку?) [d: \ a \ 1 \ s \ MyApplication.Test.1 \ MyApplication.Test.1. csproj]
Я предполагаю, что это означает, что тестовые проекты не могут найти наш личный 'MyNugetPackage'. Но как это могло случиться, когда MSBuild преуспел?
Я попытался поменять шаг MSBuild для сборки Visual Studio, но безрезультатно (опять-таки, шаг сборки сработал, шаг тестирования не удался):
- task: VSBuild@1
inputs:
solution: '**\*.sln'
platform: 'any cpu'
configuration: 'release'
clean: true
maximumCpuCount: true
msbuildArchitecture: 'x64'
Затем я попытался поменять шаг MSBuild для. NET Базовая сборка, чтобы он соответствовал заданию для тестов
- task: DotNetCoreCLI@2
displayName: Build
inputs:
command: build
projects: '**/*.csproj'
arguments: '--configuration Release'
И теперь шаг BUILD завершился неудачей.
Итак мне кажется, что у меня есть два пути вперед:
- Либо придерживайтесь либо MSBuild, либо Visual Studio Build, и определите, как затем выполнить мои тесты, либо
- . успешно скомпилировать с DotNetcoreCLI@2 вместо использования MSBuild / Visual Studio Build и надеяться, что тесты будут работать так, как ожидалось
Документация от Microsoft казалась такой простой ( Запустите ваши тесты ) .... надеясь, что кто-нибудь поможет мне выбрать правильный путь.