如何将类库项目中的文件和测试程序集包含到已发布的工件中

问题描述

我有一个解决方案,其中包括一个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),然后使用工件进行发布。

enter image description here