Azure Build Pipeline中VSTest v2任务无法找到DLL文件
问题
每次运行Azure Build Pipeline时都会收到警告:未找到匹配给定筛选器'$(BuildConfiguration)*FunctionApp1*.dll,$(BuildConfiguration)**FunctionApp1.dll'的测试源。尽管流水线执行成功,但复制任务无法找到DLL,导致单元测试无法运行。项目使用Visual Basic搭建,已尝试修改VSTest配置、切换构建模式、清理仓库等操作,问题依旧。
当前YAML配置如下:
# Automatically trigger on merges / commits to 'main' branch trigger: - main # Specify build agent image pool: vmImage: 'windows-latest' steps: - task: NuGetToolInstaller@1 - task: NuGetCommand@2 displayName: 'NuGet restore' inputs: restoreSolution: '**\*.sln' - task: VSBuild@1 displayName: 'Build solution' inputs: msbuildArgs: '/p:PackageLocation="$(BuildConfiguration)' platform: '$(BuildPlatform)' configuration: '$(BuildConfiguration)' solution: '**/*.sln' - task: VSTest@2 displayName: 'Test Assemblies' inputs: testAssemblyVer2: | **\$(BuildConfiguration)\*FunctionApp1*.dll **\$(BuildConfiguration)\**\*FunctionApp1*.dll !**\*Microsoft.VisualStudio.TestPlatform* !**\obj\** platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' - task: CopyFiles@2 displayName: 'Copy Files to: $(build.artifactstagingdirectory)' inputs: SourceFolder: '$(build.sourcesdirectory)' Contents: '**\bin\$(BuildConfiguration)\**' TargetFolder: '$(build.artifactstagingdirectory)' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact' inputs: PathtoPublish: '$(build.artifactstagingdirectory)' condition: succeededOrFailed()
仓库中实际存在的DLL路径:
AutomationTest/FunctionApp1Tests/bin/Release/net6.0/FunctionApp1.dll
解决方案
1. 修正VSTest任务的路径筛选规则
当前筛选规则缺少bin目录层,且未覆盖.NET项目编译后生成的目标框架子目录(如net6.0),导致无法匹配到实际DLL。将testAssemblyVer2修改为:
testAssemblyVer2: | **\bin\$(BuildConfiguration)\*\*FunctionApp1*.dll !**\obj\** !**\*Microsoft.VisualStudio.TestPlatform*
**\bin\$(BuildConfiguration)\*\*FunctionApp1*.dll:匹配任意目录下bin/[构建配置]/任意子目录中的FunctionApp1相关DLL,覆盖目标框架目录。- 保留排除规则避免无关文件干扰。
2. 修复VSBuild任务的语法错误
msbuildArgs中的/p:PackageLocation="$(BuildConfiguration)'存在引号不匹配问题,若无需指定NuGet包输出路径,可直接移除该参数;若需要则补全引号:
msbuildArgs: '/p:PackageLocation="$(BuildConfiguration)"'
该错误可能导致编译过程异常,间接影响后续文件查找。
3. 调整CopyFiles任务的匹配规则
原规则**\bin\$(BuildConfiguration)\**无法正确匹配包含目标框架子目录的文件,修改为:
Contents: '**\bin\$(BuildConfiguration)\*\**'
确保能复制bin/[构建配置]/下所有子目录(包括net6.0)的文件。
4. 验证构建配置变量一致性
确认流水线中BuildConfiguration变量的取值(如Release)与测试项目编译输出的目录名称完全一致,避免因大小写或拼写差异导致路径匹配失败。
内容的提问来源于stack exchange,提问作者Surc6
相关产品推荐
相关产品推荐

