对于 .NET Framework 和 .NET 5 项目的解决方案,Azure DevOps 构建管道失败

Azure DevOps build pipeline fails for solution with .NET Framework and .NET 5 projects

我有一个 .NET 解决方案,过去只包含 .NET 5 应用程序。使用 Azure DevOps 上的 YAML 文件编译得很好。

但是,由于添加了一些 .NET Framework 4.8 项目,现在失败了。我读过一些似乎(在某种程度上)解释了问题的文章,但我不清楚解决方案。也许有人可以在这里为我拼写出来?

更详细...

项目

我有以下项目组合:

图书馆对所有人都是通用的。 .NET 4.8 WebAPI 由 .NET 4.8 测试套件引用,其他 .NET 5 测试套件引用 .NET 5 WebAPI.

我有以下 YAML 文件:

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildConfiguration: 'Release'
  buildPlatform: 'Any CPU'
  platform: x64

steps:

- task: NuGetCommand@2
  displayName: 'Restore for all'
  inputs:
    restoreSolution: '$(solution)'
    feedsToUse: 'select'
    vstsFeed: '{Guid # 1}/{Guid # 2}'

- task: VSBuild@1
  displayName: 'Build all'
  inputs:
    solution: '$(solution)'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
    maximumCpuCount: true

- task: DotNetCoreCLI@2
  displayName: 'Run Tests'
  inputs:
    command: 'test'
    projects: '**/*Test.csproj'
    arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'

我们在 Azure Artifacts 中有一个私人 NuGet 库,两个 Guid ({Guid # 1}/{Guid # 2}) 允许我们访问它。

现在执行时,以下步骤似乎成功:Restore for allBuild all。但是,似乎失败的步骤是 Run Tests.

错误信息是:

##[error]Dotnet command failed with non-zero exit code on the following projects : D:\a\s\path\MySdkNet48.Test.csproj

这是 .NET 4.8 的测试项目,使用 SDK 项目文件格式。

Run Tests 步骤中深入了解更详细的细节,我看到:

D:\a\s\path\MyNonSdkNet48WebApi.csproj(328,3): error MSB4019: The imported project "C:\Program Files\dotnet\sdk.0.401\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the expression in the Import declaration "C:\Program Files\dotnet\sdk.0.401\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" is correct, and that the file exists on disk.
##[error]Error: The process 'C:\Program Files\dotnet\dotnet.exe' failed with exit code 1

##[error]Dotnet command failed with non-zero exit code on the following projects : D:\a\s\path\MySdkNet48Test.csproj

如上所述,我不清楚如何解决这个问题...

由于 4.8 项目不是 Dotnet Core/5.0 项目,它需要 运行 使用 Visual Studio 测试任务。

将测试步骤拆分为 2 个单独的步骤,一个配置为 运行 4.8 项目,一个配置为 运行 dotnet core/5.0 项目。

- task: DotNetCoreCLI@2
  displayName: 'Run Tests'
  inputs:
    command: 'test'
    projects: '**/*Test.csproj;!**/*48.Test.csproj'
    arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'

- task: VSTest@2
  displayName: 'VsTest - testAssemblies'
  inputs:
    testAssemblyVer2: |
     **\*48.Test.dll