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

Azure DevOps Pipeline中.NET测试报错:无法以自包含应用运行

解决Azure DevOps VSTest任务中testhost.runtimeconfig.json缺失的问题

问题根源

你的测试项目基于.NET 6,但当前管道使用的是针对.NET Framework的ASP.NET Core模板,导致测试项目的构建、测试环节配置不匹配:

  • VSTest任务误选中了测试平台的辅助dll(而非你的测试项目dll)
  • VSBuild的部署参数不适用于测试项目,未生成测试所需的runtime配置文件
  • 代理服务器可能缺少.NET 6 SDK支持

具体修复步骤

1. 精准筛选测试项目dll

修改VSTest任务的testAssemblyVer2规则,排除测试平台相关dll,只匹配你的测试项目:

testAssemblyVer2: |
  **\bin\$(buildConfiguration)\**\*Tests.dll
  !**\*TestAdapter.dll
  !**\obj\**
  !**\Microsoft.TestPlatform.*.dll

2. 添加.NET 6 SDK安装任务

在NuGet安装任务前,添加对应版本的.NET SDK安装步骤,确保代理环境支持.NET 6:

- task: UseDotNet@2
  inputs:
    packageType: 'sdk'
    version: '6.x'

3. 拆分Web项目与测试项目的构建逻辑

原VSBuild任务的DeployOnBuild参数是针对Web项目的部署,测试项目不需要该配置。可以拆分构建步骤:

  • 用VSBuild构建Web项目(保留原部署参数)
  • 用DotNetCoreCLI构建测试项目

修改后的构建步骤示例:

# 构建Web项目
- task: VSBuild@1
  inputs:
    solution: '**\YourWebProject.csproj' # 指定Web项目路径,而非全解决方案
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

# 构建测试项目
- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '**\*Tests.csproj' # 指定测试项目
    arguments: '--configuration $(buildConfiguration)'

4. 改用DotNetCoreCLI运行测试(可选,更适配.NET Core项目)

替换VSTest任务为DotNetCoreCLI的test命令,自动适配.NET Core测试项目:

- task: DotNetCoreCLI@2
  inputs:
    command: 'test'
    projects: '**\*Tests.csproj'
    arguments: '--configuration $(buildConfiguration) --no-build'

完整修复后的YAML示例

# ASP.NET Core + .NET 6 Tests
trigger:
- main

pool:
  vmImage: 'windows-latest'

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

steps:
# 安装.NET 6 SDK
- task: UseDotNet@2
  inputs:
    packageType: 'sdk'
    version: '6.x'

- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

# 构建Web项目
- task: VSBuild@1
  inputs:
    solution: '**\YourWebProject.csproj' # 替换为你的Web项目路径
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

# 构建测试项目
- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '**\*Tests.csproj'
    arguments: '--configuration $(buildConfiguration)'

# 运行测试
- task: DotNetCoreCLI@2
  inputs:
    command: 'test'
    projects: '**\*Tests.csproj'
    arguments: '--configuration $(buildConfiguration) --no-build'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:51:19