问题描述
我有一个解决方案,其中包括一个NET Core 3.1
Web API项目和其他几个NET Framework 4.8
类库项目。
在我的构建管道中,解决方案的构建没有任何问题,我有一个非常简单的构建,但是我需要此构建的输出(例如测试程序集以及配置文件)可用于我的发布管道。原因是我的发布管道与测试计划和测试套件相关联,并且是按需运行这些测试计划所必需的。
在任何时候我从构建管道发布构件时,都不包含任何测试程序集,唯一包含的是来自Web App的文件,这些文件对于测试目的是我不需要的。我在几个不同的地方读过我可以将其他项目添加为依赖项,但这对我来说似乎不合适,因为确实需要这些依赖项。还有另一种方法可以使构建管道发布那些其他程序集和文件吗?
[UPDATE]解决方案1:
我在其他地方看到的一种解决方案是使用copy files
任务将程序集复制到${Build.ArtifactStagingDirectory}
,然后发布工件,但它无法正常工作或我做错了什么。这是我对这两个任务的YAML定义:
task: copyFiles@2
inputs:
Contents: '**'
TargetFolder: '${Build.ArtifactStagingDirectory}'
task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'tests'
publishLocation: 'Container'
copyFiles
日志中的FWIW我确实看到文件正在复制,例如:
将d:\ a \ 1 \ s \ test \ BaseTest.cs复制到$ {Build.ArtifactStagingDirectory} \ test \ BaseTest.cs
解决方法
当您仅构建类库项目并直接在构建管道中发布工件时,这些测试程序集将不会自动包含在内。
----Solution
----NET Core 3.1 Web API project
----NET Framework 4.8 Class Library project 1
----NET Framework 4.8 Class Library project 2
...
----Test Project (Reference Class Library Project)
如果构建测试项目,它将自动包含引用的类库项目。而且,当您发布构建工件时,它还将包括生成的测试程序集。
另一种可能性是您没有选择正确的路径来复制dll,它使用的是在类库项目下不测试项目的路径。
您需要先将生成的测试程序集复制到Copy Files task到$(build.artifactstagingdirectory)
,然后使用工件进行发布。