You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps构建含.NET Framework与.NET 5项目的解决方案失败如何解决?

问题根因

你遇到的报错核心原因是:DotNetCoreCLI@2测试任务默认调用dotnet.exe执行测试逻辑,而dotnet.exe本身不支持解析非SDK格式的.NET Framework项目,也无法访问Visual Studio专属的MSBuild targets(即日志中缺失的Microsoft.WebApplication.targets)。即使你的.NET 4.8测试项目是SDK格式,因为它依赖了非SDK格式的.NET Framework 4.8 Web API项目,依然会触发找不到targets的错误。

解决方案

将测试任务拆分为两个独立步骤,分别处理.NET 5测试项目和.NET Framework 4.8测试项目即可解决问题:

  1. 保留DotNetCoreCLI@2任务,仅用于执行.NET 5测试项目,过滤掉.NET 4.8相关测试项目
  2. 新增VSTest@2任务执行.NET Framework 4.8测试项目,该任务会调用Visual Studio配套的测试组件,兼容传统.NET Framework项目

修改后完整的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

# 仅执行.NET 5测试项目
- task: DotNetCoreCLI@2
  displayName: 'Run .NET 5 Tests'
  inputs:
    command: 'test'
    projects: |
      **/*Test.csproj
      !**/*Net48*Test.csproj
    arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'
    framework: 'net5.0'

# 单独执行.NET Framework 4.8测试项目
- task: VSTest@2
  displayName: 'Run .NET Framework 4.8 Tests'
  inputs:
    testSelector: 'testAssemblies'
    testAssemblyVer2: |
      **\*Net48*Test.dll
      !**\*TestAdapter.dll
      !**\obj\**
    searchFolder: '$(System.DefaultWorkingDirectory)'
    configuration: '$(buildConfiguration)'
    codeCoverageEnabled: true

注意事项

如果你的.NET 4.8测试项目命名规则不包含Net48关键词,可以自行调整过滤规则,确保两类测试项目分别匹配到对应的执行任务即可。

内容的提问来源于stack exchange,提问作者DrGriff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:36:02