C# .Net/VS测试运行程序在Azure DevOps中运行时失败

C# .Net/VS测试运行程序在Azure DevOps中运行时失败,c#,visual-studio,unit-testing,azure-devops,azure-pipelines,C#,Visual Studio,Unit Testing,Azure Devops,Azure Pipelines,我正在运行针对.NETFramework4.6.2的C#单元测试 本地工作正常,而且它还可以很好地构建和运行构建代理上安装的VS2019的所有测试 但当使用托管或自托管代理在Azure DevOps中运行构建时,即使所有测试都成功,测试步骤也会失败 在构建代理上从命令行手动运行vstest.console.exe,工作正常并成功。我使用与Azure DevOps相同的参数运行此命令 日志中产生的错误(数百个): ##[错误][xUnit.net 00:00:00.0457701]Microsof

我正在运行针对.NETFramework4.6.2的C#单元测试

本地工作正常,而且它还可以很好地构建和运行构建代理上安装的VS2019的所有测试

但当使用托管或自托管代理在Azure DevOps中运行构建时,即使所有测试都成功,测试步骤也会失败

在构建代理上从命令行手动运行
vstest.console.exe
,工作正常并成功。我使用与Azure DevOps相同的参数运行此命令

日志中产生的错误(数百个):

##[错误][xUnit.net 00:00:00.0457701]Microsoft.VisualStudio.QualityTools.UnitTestFramework:灾难性故障:System.TypeInitializationException:“xUnit.DiaSession”的类型初始值设定项引发异常。-->System.IO.FileNotFoundException:无法加载文件或程序集'System.Reflection.TypeExtensions,Version=4.1.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。系统找不到指定的文件

##[错误]在Xunit.diseasion..cctor()处 ##[错误]---内部异常堆栈跟踪结束--- ##Xunit.DiaSession..ctor处的[错误](字符串assemblyFileName) ##[错误]位于C:\projects\Xunit\src\Xunit.runner.utility\utility\DiaSessionWrapper_DotNet.cs中的Xunit.DiaSessionWrapper..ctor(String assemblyFilename)处:第16行

##[错误]位于Xunit.XunitFrontController..ctor(AppDomainSupport AppDomainSupport、字符串汇编文件名、字符串配置文件名、布尔阴影复制、字符串阴影复制文件夹、ISourceInformation Provider SourceInformation Provider、IMessageSink diagnosticMessageSink)在C:\projects\xunit\src\xunit.runner.utility\Frameworks\XunitFrontController.cs中:第64行

##[错误]位于Xunit.Runner.VisualStudio.TestAdapter.VsTestRunner.RunTestsInAssembly(IRunContext runContext、IFramewHandle frameworkHandle、LoggerHelper logger、TestPlatformContext TestPlatformContext、IMessageSinkWithTypes reporterMessageHandler、AssemblyRunInfo runInfo)在C:\projects\xunit\src\xunit.runner.visualstudio\VsTestRunner.cs中:第458行

构建摘要

测试总数:3679 通过:3675 跳过:4 总时间:3.4993分钟 Vstest.console.exe已退出,代码为1

在日志顶部,在测试步骤初始化期间:

找到同一扩展的多个版本。选择最高版本。 Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter:14.0.2505.1 xunit.runner.visualstudio.dotnetcore.testadapter:99.99.99.0 xunit.runner.visualstudio.testadapter:99.99.99.0

管道
只有当“在发生灾难性故障时收集高级诊断”标志设置为
true
时,才会出现问题

确保它已关闭,然后工作正常

已知问题现已修复:


更新日期:2020年1月7日

这个问题再次出现,尽管前面提到的标志设置为false

我们这次找到的解决方案是将工具安装程序步骤添加到管道中,并从测试步骤中使用该步骤

UI中的工具安装程序步骤

使用正确的测试平台版本

您是否正在恢复管道中的nuget软件包?是的,以及构建所有工作正常的项目。您是否可以发布管道.yml?发布到questionhuh,我有点希望您在不同的作业或阶段运行构建和测试,并且只对构建进行nuget恢复。很抱歉,我不能帮你解决这个问题,但我相信附近会有一位azure管道专家。非常感谢在这里分享这个解决方案。你可以接受这个答案,这样其他人就可以参考这个解决方案:-)@MerlinLiang MSFT刚刚添加了更多内容,我们又出现了这个问题。这一次是另一种解决方案。也许有更好的方法来解决它?请注意,对于那些使用.netcore3.1的人来说,这将不起作用,并且yaml与.netcore不兼容
pool:
  name: Dedicated VS2017
  demands:
  - msbuild
  - visualstudio
  - vstest

steps:
- task: gittools.gitversion.gitversion-task.GitVersion@3
  displayName: GitVersion
  inputs:
    updateAssemblyInfo: true

- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.3.0'

- task: NuGetCommand@2
  displayName: 'NuGet restore Shamrock.Web'
  inputs:
    restoreSolution: '$(Parameters.solution)'

- task: Npm@1
  displayName: 'npm install Documenta'
  inputs:
    workingDir: src/Documenta/Documenta.Web/ClientApp
    verbose: false
  enabled: false

- task: Npm@1
  displayName: 'npm build Documenta/ClientApp'
  inputs:
    command: custom
    workingDir: src/Documenta/Documenta.Web/ClientApp
    verbose: false
    customCommand: 'run build'
  enabled: false

- task: Npm@1
  displayName: 'npm install Shamrock.Web/Angular'
  inputs:
    workingDir: src/Shamrock.Web/Shamrock.Web/Angular
    verbose: false
  enabled: false

- task: Npm@1
  displayName: 'npm build Shamrock.Web/Angular'
  inputs:
    command: custom
    workingDir: src/Shamrock.Web/Shamrock.Web/Angular
    verbose: false
    customCommand: 'run build'
  enabled: false

- task: VSBuild@1
  displayName: 'Build solution'
  inputs:
    solution: src/Shamrock.Web/Shamrock.Web.sln
    msbuildArgs: '/p:SEPrecompilerIncludeRazor=true /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'
    clean: true
    maximumCpuCount: true

- task: VSBuild@1
  displayName: 'Build solution D365'
  inputs:
    solution: src/Shamrock.D365/Shamrock.D365.sln
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'
    maximumCpuCount: true
  enabled: false

- task: VSBuild@1
  displayName: 'Build solution Documenta'
  inputs:
    solution: src/Documenta/Documenta.sln
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'
    maximumCpuCount: true
  enabled: false

- task: VSTest@2
  displayName: 'Test Assemblies'
  inputs:
    testAssemblyVer2: |
     **\$(BuildConfiguration)\*tests.dll
     !**\obj\**
     !**\*testadapter.dll
    vsTestVersion: 16.0
    runInParallel: false
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'
    diagnosticsEnabled: True

- task: CopyFiles@2
  displayName: 'Copy DACPAC'
  inputs:
    Contents: '**\*.dacpac'
    TargetFolder: '$(build.artifactstagingdirectory)'

- task: CopyFiles@2
  displayName: 'Copy Database Publish Profile'
  inputs:
    Contents: '**\Shamrock.Database.publish.xml'
    TargetFolder: '$(build.artifactstagingdirectory)'

- task: PublishSymbols@1
  displayName: 'Publish symbols path'
  inputs:
    SearchPattern: '**\bin\**\*.pdb'
  enabled: false
  continueOnError: true

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)'
    ArtifactName: '$(Parameters.ArtifactName)'