能否用单个VSBuild/VSTest任务实现多构建平台编译与测试?
解答
无法使用单个VSBuild或VSTest任务覆盖多个构建平台(或构建配置)。可以在YAML中统一配置通用参数(比如configuration、maximumCpuCount这类重复设置),但仍需为每个平台创建单独的构建和测试任务。
问题详情
我当前正尝试创建Azure DevOps CI流水线,针对不同构建平台(x64、x86、Any CPU)构建.NET和C++项目,并使用MSTest与CppUnitTestFramework进行测试。
当前YAML流水线包含以下编译和测试任务:
- task: VSBuild@1 displayName: Build x86 - Release inputs: solution: 'Solution.sln' platform: 'x86' configuration: 'Release' maximumCpuCount: true msbuildArchitecture: 'x64' logFileVerbosity: minimal - task: VSTest@2 displayName: Test Any CPU - Release inputs: testAssemblyVer2: | **\*Test.dll searchFolder: '$(Build.SourcesDirectory)\Bin\AnyCPU\Release' runInParallel: true runTestsInIsolation: true - task: VSTest@2 displayName: Test x86 - Release inputs: testAssemblyVer2: | **\*Test.dll searchFolder: '$(Build.SourcesDirectory)\Bin\Win32\Release' runInParallel: true runTestsInIsolation: true - task: VSBuild@1 displayName: Build x64 - Release inputs: solution: 'Solution.sln' platform: 'x64' configuration: 'Release' maximumCpuCount: true msbuildArchitecture: 'x64' logFileVerbosity: minimal - task: VSTest@2 displayName: Test x64 - Release inputs: testAssemblyVer2: | **\*Test.dll searchFolder: '$(Build.SourcesDirectory)\Bin\x64\Release' runInParallel: true runTestsInIsolation: true
我希望尽量减少任务数量,认为可通过更简洁的方式实现相同效果,预期的YAML如下(修改了searchFolder路径以获取所有构建平台子目录):
- task: VSBuild@1 displayName: Build - Release inputs: solution: 'Solution.sln' configuration: 'Release' maximumCpuCount: true msbuildArchitecture: 'x64' logFileVerbosity: minimal - task: VSTest@2 displayName: Test - Release inputs: testAssemblyVer2: | **\*Test.dll searchFolder: '$(Build.SourcesDirectory)\Bin' runInParallel: true runTestsInIsolation: true
我曾尝试保留两个编译任务并合并三个测试任务,但部分测试成功、多数失败,而分开执行时所有测试均成功。
我的疑问:
- 能否编写一个编译任务,覆盖所有构建平台(
x64、x86、Any CPU)? - 能否编写一个测试任务,测试所有构建平台的DLL文件?
- 若其中一项或两项无法实现,原因是什么?是否意味着上述原始YAML是最简洁的实现方式?
内容的提问来源于stack exchange,提问作者Huadara
相关产品推荐
相关产品推荐

